У меня есть вложенный тип в моей схеме 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",
}
]
]
}
@NishantSaini Я обновил заголовок и описание и предоставил запрос, который я выполняю, и результаты, которые продолжают генерироваться. Судя по результатам, он должен возвращать ТОЛЬКО язык, равный eng, а не все,
Похоже, что поле подзаголовка имеет тип массива, а не вложенный тип. Вот почему каждый элемент массива возвращается.
@NishantSaini хм .. когда я только что изменил субтитры из типа массива, результат теперь возвращает все как нуль. Как выглядят враги вложенного типа?
Пожалуйста, добавьте отображение индекса в вопрос. Для получения желаемого результата потребуются изменения в отображении.
@NishantSaini Я не слежу. Как изменение сопоставления запросов влияет на то, что возвращается, когда мне нужно сопоставить платформу с запросом пользователя? Сопоставление ответов — это то, что сгенерировано AWS.
Не уверен, что получил ваше сообщение, но если вы хотите вернуть вложенный объект, вы должны использовать Внутренние хиты.
Вы также можете настроить поле _source для получения только внутренних обращений.
Я читаю статью и немного запутался в смысле AWS AppSync. Какое имя я использую для обозначения исходного видео родительского типа? Итак, известно, что субтитры являются дочерними элементами этого родителя?
Привет @C.Lewis, ну, я ничего не знаю о AppSync, но я вижу, что ваш «запрос разрешения» у вас есть поисковый запрос elasticSearch. Во-первых, вы хотите получить только те объекты, на которые «попал» ваш запрос, верно? Если да, ваше отображение elasticsearch должно рассматривать субтитры как вложенный объект. И тогда вы будете использовать inner_hits в своем распознавателе запросов.
Ваш вопрос не ясен. Было бы лучше, если бы вы могли поделиться примерами документов и ожидаемым результатом.