【问题标题】:How to get the parent document in a nested top_hits aggregation?如何在嵌套的 top_hits 聚合中获取父文档?
【发布时间】:2016-07-11 05:19:24
【问题描述】:

这是我的文档/带有嵌套价格数组的映射:

{ “名称”:“Foobar”, “类型”:1, “价格”: [ { “日期”:“2016-03-22”, “价格”:100.41 }, { “日期”:“2016-03-23”, “价格”:200.41 } ] } 映射: { “特性”: { “姓名”: { “索引”:“未分析”, “类型”:“字符串” }, “类型”: { “类型”:“字节” }, “价格”: { “类型”:“嵌套”, “特性”: { “日期”: { "格式": "日期可选时间", “类型”:“日期” }, “价钱”: { “类型”:“双” } } } } }

我使用 top_hits 聚合来获取嵌套价格数组的最低价格。我还必须按日期过滤价格。这是查询和响应:

POST /index/type/_search { “大小”:0, “询问”: { “匹配全部”:{} }, “聚合”:{ “价格”: { “嵌套”:{ “路径”:“价格” }, “聚合”:{ “日期过滤器”:{ “筛选”: { “范围”: { “价格。日期”:{ “gte”:“2016-03-21” } } }, “聚合”:{ “分钟”:{ “top_hits”:{ “种类”: { “价格。价格”:{ “顺序”:“升序” } }, “大小”:1 } } } } } } } } 回复: { “采取”:3, “超时”:假, “_shards”:{ “总数”:3, “成功”:3, “失败”:0 }, “命中”:{ “总数”:2, “最大分数”:0, “命中”:[ ] }, “聚合”:{ “价格”: { “文档计数”:4, “日期过滤器”:{ “文档计数”:4, “分钟”:{ “命中”:{ “总数”:4, “最大分数”:空, “命中”:[ { "_index": "索引", "_type": "类型", "_id": "4225796ALL2016061541031", “_嵌套”:{ “字段”:“价格”, “偏移”:0 }, “_score”:空, “_资源”: { “日期”:“2016-03-22”, “价格”:100.41 }, “种类”: [ 100.41 ] } ] } } } } } }

有没有办法在响应中获取带有_id="4225796ALL2016061541031" 的父源文档(或其中的某些字段)(例如name)?第二个查询不是一个选项。

【问题讨论】:

  • “姓名”字段在哪里?您能分享一下您的索引的示例文档和映射吗?
  • 一个示例文档在我的问题的顶部。我也添加了映射。

标签: elasticsearch


【解决方案1】:

不要使用aggregations,而是使用queryinner_hits 之类的:

{
"query": {
    "nested": {
       "path": "prices",
       "query": {
          "range": {
              "prices.date": {
                "gte": "2016-03-21"
              }
            }
       },
        "inner_hits": {
           "sort": {
                  "prices.price": {
                    "order": "asc"
                  }
                },
                "size": 1
          }
       }
     }
  }

_source获取parent_documentdata的数据,从inner_hits获取实际数据。

希望对你有帮助

【讨论】:

  • 感谢您的帮助!通过您的查询,我得到了每个文档的最低价格。我需要日期大于 X 且价格最低的一份文件。
  • @Richa 我也有同样的疑问,但我怎样才能在聚合中实现这一点。您的答案是使用查询,但如果我想执行聚合怎么办。请检查此stackoverflow.com/users/7195178/harvindar-singh-garcha
猜你喜欢
  • 2018-07-14
  • 2015-12-21
  • 2018-07-22
  • 2015-05-06
  • 2022-12-15
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
相关资源
最近更新 更多