ElasticSearch版本为7.4.2
我在Elasticsearch上很烂,我想弄清楚这个查询有什么问题。
{
"size": 10,
"from": 0,
"query": {
"bool": {
"must": [
{
"exists": {
"field": "firstName"
}
},
{
"query_string": {
"query": "*",
"fields": [
"params.display",
"params.description",
"params.name",
"lastName"
]
}
},
{
"match": {
"status": "DONE"
}
}
],
"filter": [
{
"term": {
"success": true
}
}
]
}
},
"sort": {
"createDate": "desc"
},
"collapse": {
"field": "lastName.keyword",
"inner_hits": {
"name": "lastChange",
"size": 1,
"sort": [
{
"createDate": "desc"
}
]
}
},
"aggs": {
"total": {
"cardinality": {
"field": "lastName.keyword"
}
}
}
}
它会传回:
"aggregations": {
"total": {
"value": 429896
}
}
因此,大约有430k个结果,但是在分页时,我们在426k标记附近停止得到结果。
{
"size": 10,
"from": 427000,
...
}
我得到:
{
"took": 2215,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 10000,
"relation": "gte"
},
"max_score": null,
"hits": []
},
"aggregations": {
"total": {
"value": 429896
}
}
}
但是如果我把from
改为426000,我仍然得到结果。
2条答案
按热度按时间unguejic1#
您将字段
lastName.keyword
的基数聚合值与索引中的文档总数进行比较,这是两件不同的事情。您可以使用在查询级别定义的count API和from/size来检查索引中的文档总数,即它会带来与您的搜索查询匹配的文档,由于您没有
track_total_hits
,它会显示10k
,关系为gte
表示有超过10k
的文档与您的搜索查询匹配。当涉及到您的聚合时,我可以看到在这两种情况下,它都返回计数
429896
,因为此聚合不依赖于您在查询中提到的from/size。vmpqdwk32#
当我发现基数参数具有精度控制时,我感到很惊讶。
设置最大值是我的解决方案。