显示inner_hits响应的父信息

时间:2019-02-28 01:53:58

标签: elasticsearch

道歉,配置使这个问题变得很长

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

{
    "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信息附加到响应对象(某处,只要连接并易于导航就可以了。

1 个答案:

答案 0 :(得分: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*"
            }
          }
        }
      }
    }
  }
}