【发布时间】:2019-06-18 09:46:48
【问题描述】:
我使用 AWS AppSync 控制台在我的 GraphQL 架构中有一个嵌套类型。例如:在函数中,用户应输入 ID 和可选的 lang。然后应该使用该 lang 来帮助识别字幕。但是,在设置我的架构和解析器后,如下所示:每次运行查询时,它都会返回所有语言的结果(当它应该只返回用户指定的 ID 和语言时)。我不确定为什么会这样,当我分离函数并且它没有嵌套时,相同的模式和解析器可以工作。请帮忙!!! (我正在使用弹性搜索)
type Query {
getVideo(ID: String, lang: String): [video]
}
type video {
mainId: ID
title: String
subtitles: [subtitles]
}
type subtitles {
childId: ID
lang: String
caption: Boolean
}
这是我的请求解析器--附加到 video.subtitles--下面(响应映射模板是为 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
}
这是我正在运行的查询。我只想要与指定的 ID 和语言匹配的结果:
query vid(ID: "1234", lang: "eng") {
subtitles {
lang
caption
}
}
现在结果如下:注意它是如何返回 ALL langs 而不是 eng 的。我不知道为什么会这样请帮忙!
{
"data":
"getVideo": [
"subtitles" : [
{
"lang": "dutch",
"caption": "false"
},
{
"lang": "eng",
"caption": "true"
},
{
"lang": "span",
"caption": "true",
}
]
]
}
【问题讨论】:
-
你的问题不清楚。如果您可以共享示例文档和预期结果会更好。
-
@NishantSaini 我已经更新了标题和描述,并提供了我正在运行的查询以及不断生成的结果。从结果来看,它应该只返回等于 eng 的 lang 而不是所有的东西,
-
似乎字幕字段是数组类型而不是嵌套类型。这就是为什么返回数组的每一项。
-
@NishantSaini 嗯.. 当我刚刚从数组类型更改字幕时,结果现在将所有内容都返回为空。嵌套类型的敌人是什么样的?
-
请在问题中添加索引映射。需要更改映射才能获得所需的结果。
标签: elasticsearch graphql aws-appsync