【問題解決】ElasticSearch分頁查詢時(shí)數(shù)據(jù)順序錯(cuò)亂/不一致的問題
問題描述:
使用ElasticSearch分頁查詢時(shí),每次輸入同樣的分頁參數(shù)以及查詢條件,得到的結(jié)果不一致的問題。
問題分析:
ElasticSearch中索引可能是由多個(gè)分片構(gòu)成的,并且每個(gè)分片可能擁有多個(gè)副本,其對(duì)應(yīng)的設(shè)置時(shí)索引建立時(shí)的設(shè)置。
number_of_shards:索引擁有多少個(gè)分片
number_of_replicas:分片擁有多少個(gè)副本,需要部署到不同的節(jié)點(diǎn)上(就比如沒有其它節(jié)點(diǎn)但是設(shè)置數(shù)量大于0的話,服務(wù)器會(huì)提示warning)
ElasticSearch版本是6.8.1,索引設(shè)置參數(shù)如下:
{
"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"
}
}
}
}
}
這兩次查詢結(jié)果不同是由于不同分片上數(shù)據(jù)不一致,導(dǎo)致分?jǐn)?shù)不同。
處理:
利用關(guān)鍵字的hashcode,讓相同查詢條件作用到同一個(gè)分片上,保證每次輸出結(jié)果一致,并在一定程度上保證查詢效率。文章來源:http://www.zghlxwxcb.cn/news/detail-788481.html
SearchRequest request = new SearchRequest(index);
// preference解決分頁數(shù)據(jù)不準(zhǔn)確的問題(和分片有關(guān)系)
request.source(searchSourceBuilder).preference(String.valueOf(keyword.hashCode()));
restHighLevelClient.search(request, RequestOptions.DEFAULT);
歡迎指正。文章來源地址http://www.zghlxwxcb.cn/news/detail-788481.html
到了這里,關(guān)于【問題解決】ElasticSearch分頁查詢時(shí)數(shù)據(jù)順序錯(cuò)亂/不一致的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!