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

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

マッピング設定最適化によるパフォーマンス改善の取り組み + 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. マッピング設定最適化によるパフォーマンス改善の取り組み +
    match_only_textのパフォーマンス検証

    2021/08/26

    第43回Elasticsearch勉強会

    株式会社ZOZOテクノロジーズ

    EC基盤本部 検索基盤チーム エンジニア

    有村 和真
    Copyright © ZOZO Technologies, Inc.

    View full-size slide

  2. © ZOZO Technologies, Inc.
    株式会社ZOZOテクノロジーズ

    EC基盤本部 検索基盤部 検索基盤チーム

    エンジニア
    有村 和真

    2019年4月 新卒入社

    スパイスカレーにハマり中。自家栽培唐辛子おいしい。


    @pakio / @paki0o 



    2

    View full-size slide

  3. © ZOZO Technologies, Inc.
    https://zozo.jp/

    3
    ● 日本最大級のファッション通販サイト

    ● 1,400以上のショップ、8,200以上のブランドの取り扱い(ともに2021年3月
    末時点)

    ● 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商品
    を掲載

    ● コスメ専門モール「ZOZOCOSME」や靴の専門モール

    「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン

    「ZOZOVILLA」を展開

    ● 即日配送サービス

    ● ギフトラッピングサービス

    ● ツケ払い など


    View full-size slide

  4. © ZOZO Technologies, Inc.
    アジェンダ

    ● 背景・課題・概要

    ● 検証内容

    ○ index/doc_values/enabled

    ○ index_options/norms/match_only_text

    ● 検証結果

    ● まとめ

    ● Appendix

    4

    View full-size slide

  5. © ZOZO Technologies, Inc.
    背景・課題・概要

    5

    View full-size slide

  6. © ZOZO Technologies, Inc.
    背景・課題

    ● ZOZOTOWNでは商品情報の更新をリアルタイムにインデキシングしている

    ○ => 検索だけでなく、インデキシングの負荷も大きい

    ● フィールドは今後も追加される見込み

    ● 大きくアプリケーションやバッチに手を入れず、手っ取り早くパフォーマンスを上げたい


    取り組みの概要

    ● マッピングの変更のみでどこまでパフォーマンスを最適化できるか探る

    ○ インデキシング速度

    ○ インデックスサイズ

    ● 指定するべきベストなオプションを、フィールドの用途に応じて判断できるようにする

    6

    View full-size slide

  7. © ZOZO Technologies, Inc.
    もともとのマッピングの状態


    7
    商品ごとにユニークなコード
    検索、ソートで使用
    キーワード検索用情報
    検索でしか使わない
    商品に関するメタ情報
    scriptで使用

    View full-size slide

  8. © ZOZO Technologies, Inc.
    もともとのマッピングの状態


    8
    商品ごとにユニークなコード
    検索、ソートで使用
    キーワード検索用情報
    検索でしか使わない
    商品に関するメタ情報
    scriptで使用
    フィールドごとの用途が明確
    用途に合わせて、設定を最適化する

    View full-size slide

  9. © ZOZO Technologies, Inc.
    テックブログに書いたところ…


    9
    Elasticsearchのマッピング設定最適化による
    インデキシングパフォーマンス改善への取り組み
    7.14から新たなデータ型が追加になるとの情報。
    今回はこちらも合わせて検証。

    View full-size slide

  10. © ZOZO Technologies, Inc.
    新たなデータ型 : match_only_text


    ● v7.14.0 の新機能

    ● 高効率にデータを保存可能

    ○ サイズはindex_options: docs × norms: falseと同等


    ● インデックスサイズを抑えつつ、match_phraseクエリが発行可能

    ○ ただしPhraseQueryではなく、_sourceを使って裏で色々やるので重め


    ● Analyzerは指定できず、デフォルトのみ

    10

    View full-size slide

  11. © ZOZO Technologies, Inc.
    検証内容

    11

    View full-size slide

  12. © ZOZO Technologies, Inc.
    設定の最適化 - ①パラメータの指定 (全タイプ共通)



    12
    用途 index=false doc_values=false enabled=false
    検索 × 〇 ×
    script 〇 × ×
    ソート 〇 × ×
    集計 〇 × ×
    _source 〇 〇 〇

    View full-size slide

  13. © 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

    View full-size slide

  14. © 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
    ↑ 今回の検証ではスキップ

    View full-size slide

  15. © 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

    View full-size slide

  16. © 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

    View full-size slide

  17. © ZOZO Technologies, Inc.
    検証結果

    17

    View full-size slide

  18. © 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%)
    すべての指標で改善

    View full-size slide

  19. © 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%)
    すべての指標で改善

    View full-size slide

  20. © ZOZO Technologies, Inc.
    一方でデメリットも…


    ● 付与したオプションで使用できないものが使いたくなった

    ○ 再インデキシングが必要


    ● スコアが使えないため、サイトの検索などではつらいかも




    20
    デメリットと向き合いつつ、
    適材適所で使うことで程よく削減

    View full-size slide

  21. © ZOZO Technologies, Inc.
    まとめ

    21

    View full-size slide

  22. © ZOZO Technologies, Inc.
    まとめ


    ● マッピングのオプション一つでお手軽にパフォーマンス向上

    ○ 特にmatch_only_textは検索も柔軟にできるので、ログ用途だとお得そう


    ● フィールドの用途に応じて機械的に判断可能


    ● デメリットもあるので、ご利用は計画的に

    22

    View full-size slide

  23. © ZOZO Technologies, Inc.
    We are hiring !


    23
    https://hrmos.co/pages/zozotech/jobs/0000034

    View full-size slide

  24. © ZOZO Technologies, Inc.
    Appendix

    25

    View full-size slide

  25. © ZOZO Technologies, Inc.
    Mapping Query
    document
    1. match_only_text型のフィールドに対してPhraseQuery


    26

    View full-size slide

  26. © ZOZO Technologies, Inc.
    1. match_only_text型のフィールドに対してPhraseQuery - Profiler


    27
    ① Phraseクエリで指定した文を
    トークン毎に、Termクエリで検索

    View full-size slide

  27. © 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

    View full-size slide

  28. © ZOZO Technologies, Inc.
    1. match_only_text型のフィールドに対してPhraseQuery - Profiler


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

    View full-size slide

  29. © ZOZO Technologies, Inc.
    2. http_logsの負荷検証について


    30
    以下リポジトリにアップロード予定
    https://github.com/pakio/elasticsearchJp-20210826

    View full-size slide