显示inner_hits响应的父信息

问题描述 投票:0回答:1

道歉,配置使这个问题相当长

我有一个看起来像这样的架构:

{
    "mappings": {
        "mytype": {
            "properties": {
                "event_datetime": {"type": "date"},
                "elements": {
                    "type": "nested",
                    "properties": {
                        "name": {"type": "keyword"},
                        "id": {"type": "text"},
                        "type": {"type": "keyword"},
                        "content": {
                            "type": "nested",
                            "properties": {
                                "html": {"type": "text"},
                                "label": {"type": "keyword"},
                                "text": {"type": "text"},
                                "title": {"type": "text"}
                            }
                        }
                    }
                }
            }
        }
    }
}

我想找到elements.content.html包含的条目,比如http

{
    "_source": ["event_datetime"],
    "query": {
        "nested": {
            "path": "elements.content",
            "query": {
                "wildcard": {"elements.content.html": "*http*"}
            },
            "inner_hits": {}
        }
    }
}

这就是响应的相关部分

"_source": {
    "event_datetime": "2019-01-22T05:24:21"
},
"inner_hits": {
    "elements.content": {
        "hits": {
            "total": 1,
            "max_score": 1,
            "hits": [{
                "_index": "my_index",
                "_type": "mytype",
                "_id": "ABC",
                "_nested": {
                    "field": "elements",
                    "offset": 73,
                    "_nested": {
                        "field": "content",
                        "offset": 0
                    }
                },
                "_score": 1,
                "_source": {
                    "html": "blah https blah"
                }
    }...}

我想要什么

我想将elements.type列入回复。

我已经尝试了将"_source" : ["elements.content.html", "elements.type"]添加到各种级别的各种排列,但还没有弄清楚如何将elements.type信息附加到响应对象(某处,不关心在哪里,只要它附加并且易于导航)。

elasticsearch
1个回答
1
投票

要做到这一点,你需要在父级别的inner_hits,即在elements级别。因此,您可以将查询改为如下所示,即嵌套查询中的嵌套查询。

{
  "_source": [
    "event_datetime"
  ],
  "query": {
    "nested": {
      "path": "elements",
      "inner_hits": {
        "_source": [
          "elements.type",
          "elements.content.html"
        ]
      },
      "query": {
        "nested": {
          "path": "elements.content",
          "query": {
            "wildcard": {
              "elements.content.html": "*http*"
            }
          }
        }
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.