LoginSignup
1
1

More than 3 years have passed since last update.

Elasticsearch の検索結果に一貫性がなかった(inconsistent)ので preference 指定して対処した

Last updated at Posted at 2021-03-26

概要

  • Elasticserach(以降Es)7.x系において、検索をした場合、ヒット数が paginate が発生するくらい多い(あるいは結果のsizeを限定していた場合)と最初(ページロールする前)に現れるドキュメントに一貫性がなかった(inconsistent)
    • 厳密には、スコアが変わることでランキング結果がかわり、1ページ目に現れるドキュメントが変わっていたぽい
  • これは、 https://www.elastic.co/guide/en/elasticsearch/reference/current/consistent-scoring.html#_scores_are_not_reproducible でも述べられている通り仕方のない問題である
  • 検索時に preference に適切なカスタム文字列を設定することで対処できた

詳細(というほどでもないけど)

  • 原因
  • 対処方法
    • 検索時に preference に適当な文字列を渡せば、同じ文字列が渡されるならばルーティング先を保証してくれるので、結果、スコアリングにも一貫性がでて、検索結果に一貫性をもたせられる
    • 上でも述べられているように、カスタム文字列は、user_idsession id などのように、ある程度値が分散するような文字列にするべき
      • でないと、shardの負荷が偏ってしまうためだと思われる
      • 一方で、再現性をもたせたい範囲では同じ文字列を渡す必要があるはず(それが、セッション単位なのか、ユーザ単位なのか、ユーザグループ単位なのかは場合によって異なる)
  • 結果
    • 再現性がでるようになった(結果が同じになった)
  • 残った疑問
    • custom-string に渡せるカスタム文字列って、制限(文字種、長さ)ないのかな?
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1