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

Posted

技术标签:

【中文标题】嵌套类型未从父级接收用户输入【英文标题】:Nested Type Not Receiving User Input From Parent 【发布时间】: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 嗯.. 当我刚刚从数组类型更改字幕时,结果现在将所有内容都返回为空。嵌套类型的敌人是什么样的? 请在问题中添加索引映射。需要更改映射才能获得所需的结果。 【参考方案1】:

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

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

【讨论】:

我正在阅读这篇文章,我有点困惑,就 AWS AppSync 而言。我用什么名称来指代原始父类型视频?所以它知道字幕是那个父母的孩子吗? 嗨@C.Lewis,好吧,我对AppSync一无所知,但我看到你的“请求解析”你有一个elasticSearch搜索查询。首先,您只想获取查询“命中”的对象,对吗?如果是,您的弹性搜索映射必须将字幕视为嵌套对象。然后您将在请求解析器中使用 inner_hits。

以上是关于嵌套类型未从父级接收用户输入的主要内容,如果未能解决你的问题,请参考以下文章

reactjs中未从父级调用子组件函数

嵌套数据结构,其中子级从父级继承数据

如何将函数从父级传递给深层嵌套的子级并将@input 值用于Angular 8中传递的函数?

从父级而不是实体框架中的整个对象获取某个子属性

循环嵌套练习题

03-java学习-基本数据类型-运算符-键盘接收用户输入