【问题标题】:Fetch only filtered nested objects from index in elasticsearch仅从弹性搜索中的索引中获取过滤的嵌套对象
【发布时间】:2015-12-22 18:37:52
【问题描述】:

我有一个包含嵌套对象的文档,如下所示:

{
    "title" : "Title 1",
    "books": [{
        "book_title": "b title 1",
        "year": 2014
    }, {
        "book_title": "b title 2",
        "year": 2015
    }]
}

现在我需要按标题(不是 book_title)和年份(比如 2014 年)过滤书籍。我需要的输出是:

{
    "title" : "Title 1",
    "books": [{
        "book_title": "b title 1",
        "year": 2014
    }]
}

当我使用嵌套过滤器时,即使它们不匹配,我也会得到所有嵌套对象。如何仅获取匹配的嵌套对象?

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl


    【解决方案1】:

    您需要使用nested inner_hits 功能,如下所示。

    {
      "_source": [
        "title"
      ],
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "title": "title 1"
              }
            },
            {
              "nested": {
                "path": "books",
                "query": {
                  "term": {
                    "books.year": 2014
                  }
                },
                "inner_hits": {}
              }
            }
          ]
        }
      }
    }
    

    在输出中,您将得到您所期望的,即title 字段和嵌套books 数组中的匹配书。

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 2021-09-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2020-02-07
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多