Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Elasticsearchの

サジェスト機能を使った話
株式会社アイスタイル

渡邊 紘太朗(@ktaro_w)
第10回 Elasticsearch勉強会 LT

2015/06/011
自己紹介
• 渡邊 紘太朗
• 株式会社アイスタイル
• 2014年度入社(2年目)
• アーキテクチャチーム
• Elasticsearch歴
• 3ヶ月(ほぼサジェスト機能)
• SNS
• Twitter : @ktaro_w
• Qii...
今日はElasticsearch
サジェスト機能の話
3
背景
• 弊社は、全文検索システム・サジェストシステムを

Elasticsearchに移行中
• プロジェクトに参加した時点では、サジェストは

未着手の状態
• サジェストシステムの移行を担当
4
仕様について
5
仕様
• 現状のサジェストでは、18個のカテゴリが存在
• それぞれに抽出用のSQLクエリ有り
• カテゴリには優先順位がある
• 移行後は、任意のカテゴリを組み合わせら
れるようにする
6
いざ、開発スタート
7
まずは、Mappingを作成
8
Mapping
• 前方一致の「Completion Suggester」
• 利用したパラメータ
• index_analyzer
• インデキシング時のアナライザ設定
• search_analyzer
• 検索時のアナライザ設定
9
Mapping Plugins
1. elasticsearch-analysis-kuromoji
• 日本語形態素解析エンジン
• トークナイズ処理
• フィルタ処理
2. elasticsearch-analysis-icu
• 半角・全...
Mapping
• filter
• type : kuromoji_readingform
• use_romaji : true //ローマ字化
• tokenizer
• type : kuromoji_tokenizer
• mode :...
実際にデータを流し込む

(Indexing)
12
Indexing
• 利用したパラメータ
• input
• サジェストデータ入力
• output
• サジェストデータ出力
• weight
• ドキュメントの重み付け
• 今回の移行では、重要な役割
13
Indexing & Search
14
検索時は、POSTメソッドで!
例 : http://localhost:9200/IndexName/_suggest
インデックスが完成!
15
ここで疑問
16
現状のインデックスで

高負荷(リクエスト)

に耐え切れるのか?
17
懸念点
• サジェストシステムはリクエストの頻度が高い
• 現状では、最大で18個のインデックスを

対象にリクエストされる
• サーバーのスケールアップやスケールアウトも難しい
18
検証してみた
19
検証項目
1. 個別のインデックスをプログラムから複数選択

して呼び出す(※複数インデックス)
2. 上記のインデックスが持つドキュメントを

全て含んだ単一のインデックスをプログラム
から呼び出す(※単一インデックス)
20
検証1. 複数インデックス
21
「18」「9」「1」と個別のインデックスにリクエスト
2
17
6
5
4
3
8
9
11
1016
15
14
13
12
17
18
テストツール
ノード
Elasticsearh Server
①
②
検証2. 単一インデックス
22
「18、9、1」のインデックスのドキュメントを含んだ

単一のインデックス「A」にリクエスト
テストツール
ノード
Elasticsearh Server
18 1
18,9,1
・・・
・・・
①
②
A
検証用テスト環境
• サーバー数 - 1台
• ノード数 - 1個
• シャード数 - 5個
• 総ドキュメント数 - 約30000件
23
検証用テストツール
• テストツール「Gatling」
• HTTPリクエストとレスポンスを記録
• グラフィカルに結果を表示
• テストデータとして約20000件の重複のないデータを用意
• テスト項目
• 60秒間でランダムなテストデータを...
1回目
25
60秒間で、
10000リクエスト
26
複数インデックス
単一インデックス
• max response time
• 95(ms)
• mean response time
• 2(ms)
• mean requests/sec
• 166.617
• max respons...
2回目
27
60秒間で、
20000リクエスト
28
複数インデックス
• max response time
• 52351(ms)
• mean response time
• 6258(ms)
• mean requests/sec
• 303.467
• max response t...
グラフで見てみる
29
30
複数インデックス
単一インデックス
単一インデックスに
軍配が上がる
31
まとめ
• サジェスト機能の学習コストはそこまで高くない
• 日本語の資料は割と少ない
• サジェスト用インデックスは、まとめるが得策
• まとめた上で、並列化
• 重み付けもしやすい
• Gatlingが便利
32
33
Javaエンジニア・インフラエンジニア

絶賛募集中!!!
最後に…
ご静聴

ありがとうございました
34
You’ve finished this document.
Download and read it offline.
Upcoming SlideShare
[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編
Next
Upcoming SlideShare
[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編
Next
Download to read offline and view in fullscreen.

10

Share

Elasticsearchのサジェスト機能を使った話

Download to read offline

第10回Elasticsearch勉強会のLT資料になります.
「Elasticsearchのサジェスト機能を使った話」

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Elasticsearchのサジェスト機能を使った話

  1. 1. Elasticsearchの
 サジェスト機能を使った話 株式会社アイスタイル
 渡邊 紘太朗(@ktaro_w) 第10回 Elasticsearch勉強会 LT
 2015/06/011
  2. 2. 自己紹介 • 渡邊 紘太朗 • 株式会社アイスタイル • 2014年度入社(2年目) • アーキテクチャチーム • Elasticsearch歴 • 3ヶ月(ほぼサジェスト機能) • SNS • Twitter : @ktaro_w • Qiita : ktaro 2
  3. 3. 今日はElasticsearch サジェスト機能の話 3
  4. 4. 背景 • 弊社は、全文検索システム・サジェストシステムを
 Elasticsearchに移行中 • プロジェクトに参加した時点では、サジェストは
 未着手の状態 • サジェストシステムの移行を担当 4
  5. 5. 仕様について 5
  6. 6. 仕様 • 現状のサジェストでは、18個のカテゴリが存在 • それぞれに抽出用のSQLクエリ有り • カテゴリには優先順位がある • 移行後は、任意のカテゴリを組み合わせら れるようにする 6
  7. 7. いざ、開発スタート 7
  8. 8. まずは、Mappingを作成 8
  9. 9. Mapping • 前方一致の「Completion Suggester」 • 利用したパラメータ • index_analyzer • インデキシング時のアナライザ設定 • search_analyzer • 検索時のアナライザ設定 9
  10. 10. Mapping Plugins 1. elasticsearch-analysis-kuromoji • 日本語形態素解析エンジン • トークナイズ処理 • フィルタ処理 2. elasticsearch-analysis-icu • 半角・全角、依存文字を統一化 • char_filter : icu_normalizer • ㍉ =>「ミ」「リ」、㌢ =>「セ」「ン」「チ」 10
  11. 11. Mapping • filter • type : kuromoji_readingform • use_romaji : true //ローマ字化 • tokenizer • type : kuromoji_tokenizer • mode : search • properties • type : completion //前方一致 • index_analyzer • search_analyzer 11
  12. 12. 実際にデータを流し込む
 (Indexing) 12
  13. 13. Indexing • 利用したパラメータ • input • サジェストデータ入力 • output • サジェストデータ出力 • weight • ドキュメントの重み付け • 今回の移行では、重要な役割 13
  14. 14. Indexing & Search 14 検索時は、POSTメソッドで! 例 : http://localhost:9200/IndexName/_suggest
  15. 15. インデックスが完成! 15
  16. 16. ここで疑問 16
  17. 17. 現状のインデックスで
 高負荷(リクエスト)
 に耐え切れるのか? 17
  18. 18. 懸念点 • サジェストシステムはリクエストの頻度が高い • 現状では、最大で18個のインデックスを
 対象にリクエストされる • サーバーのスケールアップやスケールアウトも難しい 18
  19. 19. 検証してみた 19
  20. 20. 検証項目 1. 個別のインデックスをプログラムから複数選択
 して呼び出す(※複数インデックス) 2. 上記のインデックスが持つドキュメントを
 全て含んだ単一のインデックスをプログラム から呼び出す(※単一インデックス) 20
  21. 21. 検証1. 複数インデックス 21 「18」「9」「1」と個別のインデックスにリクエスト 2 17 6 5 4 3 8 9 11 1016 15 14 13 12 17 18 テストツール ノード Elasticsearh Server ① ②
  22. 22. 検証2. 単一インデックス 22 「18、9、1」のインデックスのドキュメントを含んだ
 単一のインデックス「A」にリクエスト テストツール ノード Elasticsearh Server 18 1 18,9,1 ・・・ ・・・ ① ② A
  23. 23. 検証用テスト環境 • サーバー数 - 1台 • ノード数 - 1個 • シャード数 - 5個 • 総ドキュメント数 - 約30000件 23
  24. 24. 検証用テストツール • テストツール「Gatling」 • HTTPリクエストとレスポンスを記録 • グラフィカルに結果を表示 • テストデータとして約20000件の重複のないデータを用意 • テスト項目 • 60秒間でランダムなテストデータを10000リクエスト • 60秒間にランダムなテストデータを20000リクエスト 24
  25. 25. 1回目 25 60秒間で、 10000リクエスト
  26. 26. 26 複数インデックス 単一インデックス • max response time • 95(ms) • mean response time • 2(ms) • mean requests/sec • 166.617 • max response time • 159(ms) • mean response time • 4(ms) • mean requests/sec • 166.611
  27. 27. 2回目 27 60秒間で、 20000リクエスト
  28. 28. 28 複数インデックス • max response time • 52351(ms) • mean response time • 6258(ms) • mean requests/sec • 303.467 • max response time • 4071(ms) • mean response time • 135(ms) • mean requests/sec • 333.122 単一インデックス
  29. 29. グラフで見てみる 29
  30. 30. 30 複数インデックス 単一インデックス
  31. 31. 単一インデックスに 軍配が上がる 31
  32. 32. まとめ • サジェスト機能の学習コストはそこまで高くない • 日本語の資料は割と少ない • サジェスト用インデックスは、まとめるが得策 • まとめた上で、並列化 • 重み付けもしやすい • Gatlingが便利 32
  33. 33. 33 Javaエンジニア・インフラエンジニア
 絶賛募集中!!! 最後に…
  34. 34. ご静聴
 ありがとうございました 34
  • naotoinoue

    Nov. 20, 2017
  • vivacissimo

    Jan. 25, 2017
  • 777ky

    May. 20, 2016
  • kieaiaarh

    May. 5, 2016
  • shimezihiziki

    May. 2, 2016
  • sasatake

    Feb. 8, 2016
  • masahidey

    Jan. 5, 2016
  • horifire

    Jan. 4, 2016
  • KanSakamoto

    Jun. 6, 2015
  • hiroyukinakamura78

    Jun. 4, 2015

第10回Elasticsearch勉強会のLT資料になります. 「Elasticsearchのサジェスト機能を使った話」

Views

Total views

7,378

On Slideshare

0

From embeds

0

Number of embeds

1,641

Actions

Downloads

17

Shares

0

Comments

0

Likes

10

×