【问题解决】ElasticSearch分页查询时数据顺序错乱/不一致的问题

【问题解决】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,让相同查询条件作用到同一个分片上,保证每次输出结果一致,并在一定程度上保证查询效率。

SearchRequest request = new SearchRequest(index);
// preference解决分页数据不准确的问题(和分片有关系)
request.source(searchSourceBuilder).preference(String.valueOf(keyword.hashCode()));
restHighLevelClient.search(request, RequestOptions.DEFAULT);

欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值