Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マッピング設定最適化によるパフォーマンス改善の取り組み + match_only_textのパ...

マッピング設定最適化によるパフォーマンス改善の取り組み + match_only_textのパフォーマンス検証 / Improving indexing performance by specifying mapping properties.

第43回Elasticsearch勉強会 2021.08.26 #elasticsearchjp
https://www.meetup.com/ja-JP/Tokyo-Elastic-Fantastics/events/279857212/

Kazuma Arimura

August 26, 2021
Tweet

More Decks by Kazuma Arimura

Other Decks in Technology

Transcript

  1. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 EC基盤本部 検索基盤部 検索基盤チーム
 エンジニア 有村

    和真
 2019年4月 新卒入社
 スパイスカレーにハマり中。自家栽培唐辛子おいしい。
 
 @pakio / @paki0o 
 
 
 2
  2. © ZOZO Technologies, Inc. https://zozo.jp/
 3 • 日本最大級のファッション通販サイト
 • 1,400以上のショップ、8,200以上のブランドの取り扱い(ともに2021年3月

    末時点)
 • 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商品 を掲載
 • コスメ専門モール「ZOZOCOSME」や靴の専門モール
 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン
 「ZOZOVILLA」を展開
 • 即日配送サービス
 • ギフトラッピングサービス
 • ツケ払い など

  3. © ZOZO Technologies, Inc. アジェンダ
 • 背景・課題・概要
 • 検証内容
 ◦

    index/doc_values/enabled
 ◦ index_options/norms/match_only_text
 • 検証結果
 • まとめ
 • Appendix
 4
  4. © ZOZO Technologies, Inc. 背景・課題
 • ZOZOTOWNでは商品情報の更新をリアルタイムにインデキシングしている
 ◦ => 検索だけでなく、インデキシングの負荷も大きい


    • フィールドは今後も追加される見込み
 • 大きくアプリケーションやバッチに手を入れず、手っ取り早くパフォーマンスを上げたい
 
 取り組みの概要
 • マッピングの変更のみでどこまでパフォーマンスを最適化できるか探る
 ◦ インデキシング速度
 ◦ インデックスサイズ
 • 指定するべきベストなオプションを、フィールドの用途に応じて判断できるようにする
 6
  5. © ZOZO Technologies, Inc. もともとのマッピングの状態
 
 8 商品ごとにユニークなコード 検索、ソートで使用 キーワード検索用情報

    検索でしか使わない 商品に関するメタ情報 scriptで使用 フィールドごとの用途が明確 用途に合わせて、設定を最適化する
  6. © ZOZO Technologies, Inc. 新たなデータ型 : match_only_text
 
 • v7.14.0

    の新機能
 • 高効率にデータを保存可能
 ◦ サイズはindex_options: docs × norms: falseと同等
 
 • インデックスサイズを抑えつつ、match_phraseクエリが発行可能
 ◦ ただしPhraseQueryではなく、_sourceを使って裏で色々やるので重め
 
 • Analyzerは指定できず、デフォルトのみ
 10
  7. © ZOZO Technologies, Inc. 設定の最適化 - ①パラメータの指定 (全タイプ共通)
 
 


    12 用途 index=false doc_values=false enabled=false 検索 × 〇 × script 〇 × × ソート 〇 × × 集計 〇 × × _source 〇 〇 〇
  8. © ZOZO Technologies, Inc. 設定の最適化 - ②パラメータの指定 (テキスト)
 
 


    type : text type : match_only_text 用途 index_options: docs index_options: freqs index_options: positions index_options: offsets norms: false term 〇 〇 〇 〇 〇 〇 match △ scoreが不正確 〇 〇 〇 △ scoreが不正確 △ scoreを1.0に固定 phrase × × 〇 〇 △ scoreが不正確 △ scoreを1.0に固定 速度低下 ※1 highlight 〇 〇 〇 ◎ 高速 〇 〇 13 ※1 Appendix 1
  9. © ZOZO Technologies, Inc. 設定の最適化 - ②パラメータの指定 (テキスト)
 
 


    type : text type : match_only_text 用途 index_options: docs index_options: freqs index_options: positions index_options: offsets norms: false term 〇 〇 〇 〇 〇 〇 match △ scoreが不正確 〇 〇 〇 △ scoreが不正確 △ scoreを1.0に固定 phrase × × 〇 〇 △ scoreが不正確 △ scoreを1.0に固定 速度低下 ※1 highlight 〇 〇 〇 ◎ 高速 〇 〇 14 ↑ 今回の検証ではスキップ
  10. © ZOZO Technologies, Inc. 設定の最適化 - テストパターン一覧
 
 • 1.

    ZOZOTOWN商品インデックス
 ◦ 1.1. 最適化なし
 ◦ 1.2. index/doc_values/enabled を指定
 ◦ 1.3. 1.2. + index_options/norms を指定
 
 • 2. Rallyのhttp_logs(一部抜粋)
 ◦ 2.1. Rallyのデフォルト設定
 ◦ 2.2. requestの型を match_only_text に変更
 15
  11. © ZOZO Technologies, Inc. Rally 
 
 • 既存インデックスから負荷試験トラックを作成可能
 16

    ~ $ esrally create-track --track={保存名} --target-hosts=localhost:9200 --indices="{インデックス名}" --output-path={保存先} ~ $ tree sample sample ├── test-documents-1k.json ├── test-documents-1k.json.bz2 ├── test-documents.json ├── test-documents.json.bz2 ├── test.json └── track.json --- サンプリングされたドキュメント --- 抽出したドキュメント --- インデックス定義 --- 負荷試験シナリオ https://github.com/elastic/rally
  12. © ZOZO Technologies, Inc. 設定の最適化 - テストパターン一覧
 
 1. ZOZOTOWN商品インデックス


    18 最適化なし index/doc_values/enabled 左記 + index_options/norms Store Size (GB) 15.9505 13.6557 (-14%) 12.8959 (-19%) Median Throughput (docs/s) 2610 2881 (+10%) 2706 (+4%) 90th percentile latency (ms) 5018 4057 (-19%) 3898 (-22%) すべての指標で改善
  13. © ZOZO Technologies, Inc. 設定の最適化 - テストパターン一覧
 
 2. http_logsインデックス


    19 デフォルト設定 match_only_text Store Size (GB) 0.832119 0.740166 (-11%) Median Throughput (docs/s) 71104.4 73727.5 (+4%) 90th percentile latency (ms) 77.0814 75.6037 (-2%) すべての指標で改善
  14. © ZOZO Technologies, Inc. 一方でデメリットも…
 
 • 付与したオプションで使用できないものが使いたくなった
 ◦ 再インデキシングが必要


    
 • スコアが使えないため、サイトの検索などではつらいかも
 
 
 
 20 デメリットと向き合いつつ、 適材適所で使うことで程よく削減
  15. © ZOZO Technologies, Inc. We are hiring !
 
 23

    https://hrmos.co/pages/zozotech/jobs/0000034
  16. © ZOZO Technologies, Inc. 1. match_only_text型のフィールドに対してPhraseQuery - Profiler
 
 27

    ① Phraseクエリで指定した文を トークン毎に、Termクエリで検索
  17. © ZOZO Technologies, Inc. 1. match_only_text型のフィールドに対してPhraseQuery - Profiler
 
 28

    ② 得られたドキュメントの_sourceを用いて、疑似 的にPhraseクエリを再現 https://github.com/elastic/elasticsearch/blob/76a684ad322ddb8da2f20862 e8050aa4ad148a37/modules/mapper-extras/src/main/java/org/elasticsear ch/index/query/SourceConfirmedTextQuery.java
  18. © ZOZO Technologies, Inc. 1. match_only_text型のフィールドに対してPhraseQuery - Profiler
 
 29

    ③全てのドキュメントに対して、 固定のスコアを付与