gpt4 book ai didi

elasticsearch - Elasticsearch中排序后的大小查询的并集

转载 作者:行者123 更新时间:2023-12-03 02:02:52 25 4
gpt4 key购买 nike

我有Elasticsearch中的文档,例如:

{
"key1":1,
"key2":2,
"key3":3
}

我想查询返回30个文档的查询,这些文档是的并集:
  • key1 +
  • 中具有最高值的10个文档
  • key2 +
  • 中具有最高值的10个文档
  • key3中具有最高值的10个文档

  • 我有2个主意:
  • 使用DisMaxQuery-但我无法使用排序。可能错过了一些..
  • 使用 MultiSearch
  • -但我想获得一个结果对象

  • 任何的意见都将会有帮助!

    最佳答案

    另一个想法是在termskey1key2上添加三个key3聚合,每个聚合都按max子聚合排序(以获取每个键的最高值(value)),并且可以为它们中的每个添加另一个top_hits子聚合。每个键可能会获得少于10个文档,如果这是一个问题,则可以将size聚合的terms增加到2或3,然后在客户端过滤掉不必要的热门匹配。

    {
    "size": 0,
    "query": {
    "match_all": {}
    },
    "aggs": {
    "topkey1": {
    "terms": {
    "field": "key1",
    "size": 1,
    "order": {
    "max_key1": "desc"
    }
    },
    "aggs": {
    "max_key1": {
    "max": {
    "field": "key1"
    }
    },
    "key1_tophits": {
    "top_hits": {
    "size": 10
    }
    }
    }
    },
    "topkey2": {
    "terms": {
    "field": "key2",
    "size": 1,
    "order": {
    "max_key2": "desc"
    }
    },
    "aggs": {
    "max_key2": {
    "max": {
    "field": "key2"
    }
    },
    "key2_tophits": {
    "top_hits": {
    "size": 10
    }
    }
    }
    },
    "topkey3": {
    "terms": {
    "field": "key3",
    "size": 1,
    "order": {
    "max_key3": "desc"
    }
    },
    "aggs": {
    "max_key3": {
    "max": {
    "field": "key3"
    }
    },
    "key_tophits": {
    "top_hits": {
    "size": 10
    }
    }
    }
    }
    }
    }

    关于elasticsearch - Elasticsearch中排序后的大小查询的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196165/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com