我正在使用 Elasticsearch 7.6.0 并对我的一个查询进行分页。它似乎运行良好,我可以使用搜索 from
和 size
参数来改变每页和所选页面的结果数。
query = 'sample query'
items_per_page = 12
page = 0
es_query = {'query': {
'bool': {
'must': [{
'multi_match': {
'query': query,
"fuzziness": "AUTO",
"operator": "and",
'fields': ['title^2', 'description']
},
}]
}
}, 'min_score': 5.0}
res = es.search(index='my-index', body=es_query, size=items_per_page, from_=items_per_page*page)
hits = sorted(res['hits']['hits'], key=lambda x: x['_score'], reverse=True)
print(res['hits']['total']['value']) # This changes depending on the page provided
我注意到返回的结果数量取决于提供的页面,这对我来说毫无意义!结果的数量也在波动,这让我更加困惑:第 0 页,233 个项目。第 1 页,157 条。第 2 页,157 条。第3页,233条...
为什么 res['hits']['total']['value']
取决于大小和 from 参数?
最佳答案
搜索被分发并发送到所有持有与搜索索引匹配的分片的节点。然后将所有结果合并并返回。有时,并非所有分片都可以被搜索到。这发生在
- 集群很忙
- 由于恢复过程,特定分片不可用
- 优化了搜索,省略了分片。
在响应中,有一个 _shards 部分是这样的:
{
"took": 1,
"timed_out": false,
"_shards":{
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits":{...}
}
检查失败的分片是否有除 0 以外的任何值。如果是,请检查日志以及集群和索引状态。
关于Elasticsearch 结果数量随分页变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61602932/