多个Elasticsearch Inner_hits查询未按预期提供结果

时间:2019-02-22 13:14:01

标签: elasticsearch

我正在尝试使用Elastic搜索的内部匹配功能来检索子文档内容。我的查询包含两个has_child子句,如下面的代码片段所示。我观察到的是,我在内部命中响应中仅获得属于第二个子句的一部分的那些子内容。看起来最后一个内部匹配会覆盖第一个内部匹配。

有什么办法可以同时获得内在点击吗?

这是我使用的查询。

{  
   "query":{  
      "bool":{  
         "must":[

            {  
               "has_child":{  
                  "type":"subformcontent",
                  "query":{
                    "bool": {
                        "must": [
                            {
                                "term":{  
                                    "txt_1.raw":"Malayalam"
                                }
                            },
                            {
                                "term":{  
                                    "parent_field_id":"1000"
                                }
                            }
                        ]
                    }                                            
                  },
               "inner_hits":{  
                     "size":10
                  }                  
               }
            }, 
            {  
               "has_child":{  
                  "type":"subformcontent",
                  "query":{
                    "bool": {
                        "must": [
                            {
                                "term":{  
                                    "txt_1.raw":"Malayalam"
                                }
                            },
                            {
                                "term":{  
                                    "parent_field_id":"1001"
                                }
                            }
                        ]
                    }                                            
                  },
               "inner_hits":{  
                     "size":10
                  }
               }
            }
         ]
      }
   }

}

1 个答案:

答案 0 :(得分:0)

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html

  

名称

     

在响应中用于特定内部匹配定义的名称。如果在单个搜索请求中定义了多个内部匹配,则很有用。默认值取决于定义内部匹配的查询。对于has_child查询和过滤器,这是子类型; has_parent查询和过滤器,这是父类型;嵌套查询和过滤器,这是嵌套路径。

我想是因为您没有定义名称,并且文档中说has_child的默认值为 type ,所以您可以为inner_hits查询定义名称。否则,两者都被命名为“ subformcontent”,因此它们会相互覆盖。

{  
   "has_child":{  
      ...
      "inner_hits":{  
         "size":10,
         "name": "hits_1"
      }                  
   }
}, 
{  
   "has_child":{  
      ...
      "inner_hits":{  
         "size":10,
         "name": "hits_2"
      }
   }
}

可能的重复项:How to return multiple inner hits in multiple nested sub-queries for the same path?