Elasticsearch 结果数量随分页变化

标签 elasticsearch pagination

我正在使用 Elasticsearch 7.6.0 并对我的一个查询进行分页。它似乎运行良好,我可以使用搜索 fromsize 参数来改变每页和所选页面的结果数。

    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/

相关文章:

elasticsearch - ElasticSearch集群行为-定义所有节点以一起更新

elasticsearch - 在ElasticSearch查询和索引中使用逗号分隔的字符串进行搜索

php - cakephp分页排序先降序

node.js - 我们如何从elasticsearch索引中获取最后一个文档?

docker - 无法连接到 docker 中端口9300上的Elasticsearch

elasticsearch - elasticsearch:允许发现文档,而无需公开源代码?

django - 如何让自定义分页类适用于 django Rest Framework v3.6

php - 如何使用 php 表单将 GET 变量添加到当前页面 url 的末尾?

css - 分页不显示(显示尺寸 659.08 x 0)

angularjs - 在mean.io堆栈中表达js分页