gpt4 book ai didi

elasticsearch - Elasticsearch按分页顺序排列不同的记录

转载 作者:行者123 更新时间:2023-12-03 01:32:00 24 4
gpt4 key购买 nike

在术语字段上按顺序分页汇总后如何获取记录。到目前为止,我有这个:

{
"query": {
"bool": {
"filter": [
{
"terms": {
"user_id.keyword": [
"user@domain.com"
]
}
},
{
"range": {
"creation_time": {
"gte": "2019-02-04T19:00:00.000Z",
"lte": "2019-05-04T19:00:00.000Z"
}
}
}
],
"should": [
{
"wildcard": {
"operation": "*sol*"
}
},
{
"wildcard": {
"object_id": "*sol*"
}
},
{
"wildcard": {
"user_id": "*sol*"
}
},
{
"wildcard": {
"user_type": "*sol*"
}
},
{
"wildcard": {
"client_ip": "*sol*"
}
},
{
"wildcard": {
"country": "*sol*"
}
},
{
"wildcard": {
"workload": "*sol*"
}
}
]
}
},
"aggs": {
"user_ids": {
"terms": {
"field": "country.keyword",
"include": ".*United.*"
}
}
},
"from": 0,
"size": 10,
"sort": [
{
"creation_time": {
"order": "desc"
}
}
]
}

我调查了 this,有人说可以通过使用复合聚合或使用分区来实现。但是我不确定如何真正实现这一目标。

我也查看了bucket_sort,但似乎无法正常工作:
"my_bucket_sort": {
"bucket_sort": {
"sort": [
{
"user_ids": {
"order": "desc"
}
}
],
"size": 3
}
}

我是这个菜鸟。请帮我。谢谢。

最佳答案

由于该字段是国家/地区,并且大概没有很高的基数,因此您可以将size设置为足够高的数字,以在单个请求中返回所有国家/地区

  "aggs": {
"user_ids": {
"terms": {
"field": "country.keyword",
"include": ".*United.*",
"size": 10000
}
}
}

或者,对于高基数字段,您可以先过滤聚合,然后使用分区来分页显示值
{
"size": 0,
"aggs": {
"user_ids": {
"filter": {
"wildcard" : { "country" : ".*United.*" }
},
"aggs": {
"countries": {
"terms": {
"field": "country.keyword",
"include": {
"partition": 0,
"num_partitions": 20
},
"size": 10000
}
}
}
}
}
}

您每次发送最多19个查询时,都会增加 partition的值

有关更多详细信息,请参见 elastic documentation

关于elasticsearch - Elasticsearch按分页顺序排列不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55354995/

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