我正在尝试使用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
}
}
}
]
}
}
}
答案 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?