【问题解决】ElasticSearch分页查询时数据顺序错乱/不一致的问题
问题描述:
使用ElasticSearch分页查询时,每次输入同样的分页参数以及查询条件,得到的结果不一致的问题。
问题分析:
ElasticSearch中索引可能是由多个分片构成的,并且每个分片可能拥有多个副本,其对应的设置时索引建立时的设置。
number_of_shards:索引拥有多少个分片
number_of_replicas:分片拥有多少个副本,需要部署到不同的节点上(就比如没有其它节点但是设置数量大于0的话,服务器会提示warning)
ElasticSearch版本是6.8.1,索引设置参数如下:
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"_doc": {
"properties": {
"@timestamp": {
"type": "date"
},
"@version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "keyword"
},
"sfz": {
"type": "text"
},
"content": {
"type": "text"
},
"address": {
"type": "text"
}
}
}
}
}
这两次查询结果不同是由于不同分片上数据不一致,导致分数不同。
处理:
利用关键字的hashcode,让相同查询条件作用到同一个分片上,保证每次输出结果一致,并在一定程度上保证查询效率。文章来源:https://www.toymoban.com/news/detail-788481.html
SearchRequest request = new SearchRequest(index);
// preference解决分页数据不准确的问题(和分片有关系)
request.source(searchSourceBuilder).preference(String.valueOf(keyword.hashCode()));
restHighLevelClient.search(request, RequestOptions.DEFAULT);
欢迎指正。文章来源地址https://www.toymoban.com/news/detail-788481.html
到了这里,关于【问题解决】ElasticSearch分页查询时数据顺序错乱/不一致的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!