开发者社区 > 大数据与机器学习 > 检索分析服务 Elasticsearch版 > 正文

Elasticsearch 7.10 中查询数据与总数不对应

问题描述:对于某个查询条件,返回的total总数为24780(已开启(max_result_window),然后从第9000条,开始查询10条(from=9000, size=10),返回数据为空。 72ACE377-D114-4ba7-A666-18763EF9805C.png

**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": "</font>",
        "pre_tags": "<font style='color:red'>",
        "fragment_size": 50,
        "fields": {
            "content": {},
            "title": {}
        }
    },
    "collapse": {
        "field": "id.keyword"
    }
}

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

展开
收起
游客cbl6wljnri4p4 2023-04-04 11:36:45 1019 0
2 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在Elasticsearch 7.10中,查询数据与总数不对应可能有以下几个原因:

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

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

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

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

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

    2023-04-24 18:27:17
    赞同 展开评论 打赏
  • 坚持这件事孤独又漫长。
    • 分片设置不正确:Elasticsearch使用分片来存储和查询数据,如果查询时指定的分片范围与实际数据所在的分片范围不一致,也会导致查询数据与总数不对应。检查查询时指定的分片范围是否正确,并确保查询时使用的路由值与文档实际存储的路由值一致。

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

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

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

    2023-04-04 14:45:16
    赞同 展开评论 打赏

阿里云检索分析服务Elasticsearch版兼容开源ELK功能,免运维全托管,提升企业数据检索与运维分析能力。

相关产品

  • 检索分析服务 Elasticsearch版
  • 热门讨论

    热门文章

    相关电子书

    更多
    阿里云Elasticsearch体系架构与特性解析 立即下载
    开源与云:Elasticsearch应用剖析 立即下载
    《Elasticsearch全观测解决方案》 立即下载