Вложенный тип не получает пользовательский ввод от родителя

У меня есть вложенный тип в моей схеме GraphQL с использованием консоли AWS AppSync. Например: в функции пользователь должен ввести идентификатор и, необязательно, язык. Затем этот язык следует использовать для идентификации субтитров. Однако после настройки моей схемы и распознавателя следующим образом: каждый раз, когда я запускаю запрос, он возвращает результат со всеми языками (когда он должен возвращать только идентификатор и язык, указанные пользователем). Я не уверен, почему это так, когда я отделяю функцию, и она не вложена, работает та же схема и преобразователь. пожалуйста помоги!!! (Я использую эластичный поиск)

type Query {
  getVideo(ID: String, lang: String): [video]
}

type video {
  mainId: ID
  title: String
  subtitles: [subtitles]
}

type subtitles {
  childId: ID
  lang: String
  caption: Boolean
}

Это мой преобразователь запросов — это прикреплено к видео.субтитры — ниже (шаблон сопоставления ответов является стандартным при создании списка для ES):

{
"version": "2018-02-28",
"operation": "GET",
"path":"/lang/lang/_search",
#if (!$context.arguments.lang)
"params": {}
#else
"params": {
   "body": {
    "from": 0,
    "size": 50,
    "query": {
      "bool": {
        "must": [
           {"match" : {"lang.keyword" : "${context.args.lang}" }}
           ]
         }
       }
     }
    }
  #end
  } 

Это запрос, который я запускаю. Мне нужны только результаты, соответствующие идентификатору и указанному языку:

query vid(ID: "1234", lang: "eng") {
    subtitles {
       lang
       caption
    }
 }

Теперь результат следующий: обратите внимание, как он возвращает ВСЕ языки, а не только eng. Я не уверен, почему это пожалуйста помоги!

{
  "data":
     "getVideo": [
         "subtitles" : [
            {
              "lang": "dutch",
              "caption": "false"
            },
           {
              "lang": "eng",
             "caption": "true"
           },
           {
              "lang": "span",
              "caption": "true",
           }
      ]
    ]
   }

Ваш вопрос не ясен. Было бы лучше, если бы вы могли поделиться примерами документов и ожидаемым результатом.

Nishant 24.01.2019 16:46

@NishantSaini Я обновил заголовок и описание и предоставил запрос, который я выполняю, и результаты, которые продолжают генерироваться. Судя по результатам, он должен возвращать ТОЛЬКО язык, равный eng, а не все,

C. Lewis 24.01.2019 16:55

Похоже, что поле подзаголовка имеет тип массива, а не вложенный тип. Вот почему каждый элемент массива возвращается.

Nishant 24.01.2019 17:00

@NishantSaini хм .. когда я только что изменил субтитры из типа массива, результат теперь возвращает все как нуль. Как выглядят враги вложенного типа?

C. Lewis 24.01.2019 17:04

Пожалуйста, добавьте отображение индекса в вопрос. Для получения желаемого результата потребуются изменения в отображении.

Nishant 24.01.2019 17:07

@NishantSaini Я не слежу. Как изменение сопоставления запросов влияет на то, что возвращается, когда мне нужно сопоставить платформу с запросом пользователя? Сопоставление ответов — это то, что сгенерировано AWS.

C. Lewis 24.01.2019 17:18
1
6
101
1

Ответы 1

Не уверен, что получил ваше сообщение, но если вы хотите вернуть вложенный объект, вы должны использовать Внутренние хиты.

Вы также можете настроить поле _source для получения только внутренних обращений.

Я читаю статью и немного запутался в смысле AWS AppSync. Какое имя я использую для обозначения исходного видео родительского типа? Итак, известно, что субтитры являются дочерними элементами этого родителя?

C. Lewis 24.01.2019 17:20

Привет @C.Lewis, ну, я ничего не знаю о AppSync, но я вижу, что ваш «запрос разрешения» у вас есть поисковый запрос elasticSearch. Во-первых, вы хотите получить только те объекты, на которые «попал» ваш запрос, верно? Если да, ваше отображение elasticsearch должно рассматривать субтитры как вложенный объект. И тогда вы будете использовать inner_hits в своем распознавателе запросов.

g__n 24.01.2019 18:53

Другие вопросы по теме