Elasticsearch 7.10 中查询数据与总数不对应[阿里云检索分析服务 Elasticsearch版]

问题描述:对于某个查询条件,返回的total总数为24780(已开启(max_result_window),然后从第9000条,开始查询10条(from=9000, size=10),返回数据为空。

**body查询条件为: **

query = {
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                         "title": "乡村振兴"
                     }
                },
                {
                    "match": {
                        "content": "乡村振兴"
                    }
                },
            ],
            "filter": {
                "range": {
                    "publish_time": {
                        "lte": "2023-03-28"
                    }
                }
            }
        },
    },
    "sort": {
        "publish_time": {
            "order": "desc"
        }
    },
    "highlight": {
        "post_tags": "",
        "pre_tags": "",
        "fragment_size": 50,
        "fields": {
            "content": {},
            "title": {}
        }
    },
    "collapse": {
        "field": "id.keyword"
    }
}

针对于该问题查询到网上有三种普通解决方案,都尝试过但未能解决。如下: 1. 升级到7.0以上版本,如题。 1. 查询条件中,加入sort字段,未能解决 1. 分片缓存的原因导致,当前索引只有一个分片

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 在Elasticsearch 7.10中,查询数据与总数不对应可能有以下几个原因:

    1、查询语句中使用了分词器:分词器会将查询语句中的文本进行分词处理,可能会导致查询结果不准确。可以尝试使用keyword类型的字段或者关闭分词器来解决问题。

    2、查询语句中使用了聚合函数:聚合函数可能会对查询结果进行统计和计算,可能会导致查询结果不准确。可以尝试关闭聚合函数或者使用其他方式进行统计计算。

    3、查询语句中使用了近似查询:近似查询(如模糊查询、通配符查询等)可能会返回一些与查询条件不完全匹配的数据,导致查询结果不准确。可以尝试使用精确查询或者提高匹配度来解决问题。

    4、数据库中存在重复数据:重复数据可能会导致查询结果不准确。可以尝试去重或者修改数据来解决问题。

    5、Elasticsearch本身存在一些限制:例如,默认情况下,Elasticsearch最多只能返回10000条数据,如果查询结果超过了这个限制,可能会导致查询结果不准确。可以尝试修改Elasticsearch配置或者使用分页查询来解决问题。

    • 分片设置不正确:Elasticsearch使用分片来存储和查询数据,如果查询时指定的分片范围与实际数据所在的分片范围不一致,也会导致查询数据与总数不对应。检查查询时指定的分片范围是否正确,并确保查询时使用的路由值与文档实际存储的路由值一致。

    • max_result_window设置过小:默认情况下,Elasticsearch查询结果的最大数量是10,000,可以通过max_result_window参数调整该值。如果查询结果总数超过max_result_window的值,查询结果只会返回前max_result_window条数据。检查max_result_window的值是否过小,如果过小可以通过调整该值来解决问题。

    • 内存不足:如果查询时内存不足,也会导致查询结果不完整。检查Elasticsearch和系统的内存使用情况,如果内存不足,可以尝试增加内存或优化查询语句以减少内存使用量。

    • 索引数据不完整:如果索引数据不完整或者有数据损坏,也会导致查询数据与总数不对应。可以使用Elasticsearch提供的工具进行索引数据的检查和修复。