问题描述:对于某个查询条件,返回的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": "</font>",
"pre_tags": "<font style='color:red'>",
"fragment_size": 50,
"fields": {
"content": {},
"title": {}
}
},
"collapse": {
"field": "id.keyword"
}
}
针对于该问题查询到网上有三种普通解决方案,都尝试过但未能解决。如下: 1. 升级到7.0以上版本,如题。 1. 查询条件中,加入sort字段,未能解决 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提供的工具进行索引数据的检查和修复。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。