gpt4 book ai didi

Elasticsearch 排除对字段值的最高命中

转载 作者:行者123 更新时间:2023-11-29 02:46:13 25 4
gpt4 key购买 nike

{'country': 'France', 'collected': '2018-03-12', 'active': true}
{'country': 'France', 'collected': '2018-03-13', 'active': true}
{'country': 'France', 'collected': '2018-03-14', 'active': false}
{'country': 'Canada', 'collected': '2018-02-01', 'active': false}
{'country': 'Canada', 'collected': '2018-02-02', 'active': true}

假设我有这个结果集,我想按国家/地区对它们进行分组。按国家/地区分组后,结果如下:

{'country': 'France', 'collected': '2018-03-14', 'active': false}
{'country': 'Canada', 'collected': '2018-02-02', 'active': true}

但我想排除最后一行 activefalse 的结果(同一国家/地区的旧行可以是 true 或 false 并不重要,只要最后一行等于 true),我怎么能在 elasticsearch 中做到这一点?这是我的查询:

POST /test/_search?search_type=count
{
"aggs": {
"group": {
"terms": {
"field": "country"
},
"aggs": {
"group_docs": {
"top_hits": {
"size": 1,
"sort": [
{
"collected": {
"order": "desc"
}
}
]
}
}
}
}
}
}

最佳答案

我认为您可以通过top_hits 中的两个字段进行排序:activecollected。基本上,您希望 true 排在第一位且相等时,然后按 collected 排序。类似下面的内容将始终显示按 collected 排序的 active:true 文档。

此解决方案的唯一缺点是,如果您没有任何事件文档,top_hits 将显示一个 active:false 文档。

{
"size": 0,
"aggs": {
"group": {
"terms": {
"field": "country"
},
"aggs": {
"group_docs": {
"top_hits": {
"size": 1,
"sort": [
{
"active": {
"order": "desc"
},
"collected": {
"order": "desc"
}
}
]
}
}
}
}
}
}

关于Elasticsearch 排除对字段值的最高命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51360616/

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