Boucing Resultsという問題がある。検索結果に重複・欠落が起きる問題。
ソートのキーに使われる項目の値が同じdocumentがあると、検索結果の順序が一定にならない可能性がある。
Elasticsearchのクエリでページネーションを行う場合、各ページへのリクエストは独立しているので、それぞれのアクセスで別のシャードにアクセスする可能性がある。
- 対象のElasticsearchクラスタがレプリカを持っている
- ソート対象項目の値が同一の複数documentがページを跨っている
- それらのページへのリクエストが別のシャードに割り当てられる
- それぞれのシャードが対象のdocumentを返す順番が異なる
といった条件が揃うと、1ページ目で返された検索結果が次のページでも返ってくる、という事象が起きる。
これは、Elasticsearch: The Definitive Guide でも説明されている Bouncing Results という問題とのこと。
この問題と思われる事象に遭遇したため、事象の再現と対策の検証を行なった。