嵌套类型未从父级接收用户输入

时间:2019-01-24 15:41:47

标签: elasticsearch graphql aws-appsync

我使用AWS AppSync控制台在GraphQL模式中具有嵌套类型。例如:在函数中,用户应输入ID和可选的lang。然后应使用该lang来帮助标识字幕。但是,按如下所示设置架构和解析器之后:每次运行查询时,它都会返回带有所有lang的结果(当它只应返回用户指定的ID和lang时)。我不确定为什么会这样,当我分离函数并且不嵌套时,相同的架构和解析器就可以工作了。请帮忙!!! (我正在使用弹性搜索)

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和指定的lang匹配的结果:

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

现在结果如下:注意它如何返回所有lang而不是eng。我不确定为什么请帮助!

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

1 个答案:

答案 0 :(得分:0)

不确定我是否收到您的消息,但是当您想返回嵌套对象时,必须使用Inner Hits

您还可以将字段_source设置为仅检索内部匹配。