概要
ここ最近、Elasticsearchを7.Xにアップグレードしたら、1万件超えてるデータのhitsが10,000 になっていた
また、「Java High Level REST Client」を使用したアプリでの取得は0になっていた・・・・・
Elasticsearch7.0.0から10,000hitsまで正確に確認できる
-
Elasticsearch version 7.0.0 Release note
→Track total hits up to 10,000 by default #37466 (issue: #33028) - Track total hits up to 10,000 by default #37466
10,000hits以上どうやって検索する?
ドキュメントのサンプルから持ってきたのだが、track_total_hitsをtrueに設定すると
10,000hits以上を検索できる
curl -X GET "localhost:9200/twitter/_search?pretty" -H 'Content-Type: application/json' -d'
{
"track_total_hits": true,
"query": {
"match" : {
"message" : "Elasticsearch"
}
}
}
Java High Level REST Clientでは?
まず、7.0.0以上の「Java High Level REST Client」を使用する
「SearchSourceBuilder」の「trackTotalHits」メソッドに「true」を設定すればできる
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder. trackTotalHits(true);
(java doc) SearchSourceBuilder.trackTotalHits
hitsの件数の取得方法が6.Xのものと比べて変更があった
long hits = hits.getTotalHits().value;
6.Xの時は「getTotalHits」メソッドの戻り値がlongだった
long totalHits = hits.getTotalHits();