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

OpenSearchで始める全文検索

 OpenSearchで始める全文検索

とらのあなラボTechConferenceVol.2におけるセッション「OpenSearchで始める全文検索」の登壇資料です。

■イベント情報
https://yumenosora.connpass.com/event/241175/

■今後のイベントについてはこちら
https://yumenosora.connpass.com/

■虎の穴ラボ 採用サイト
https://yumenosora.co.jp/tora-lab/

More Decks by 虎の穴ラボ株式会社

Other Decks in Technology

Transcript

  1. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchで始める全文検索 1

    T O R A N O A N A L a b 虎の穴ラボ株式会社 三井 明楽
  2. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 自己紹介 三井

    明楽 • 2018年10月入社 • エンジニア ◦ 主にとらコイン、Fantiaを担当 虎の穴ラボへに入社したきっかけ • 身近なサービスに関わりたい • オタク業界に関わりたい 趣味 • アニメ ◦ まどマギ ◦ SAO • 音楽(アーティスト) ◦ 梶浦由記さん ◦ Sound Horizon/Linked Horizon • 吹奏楽・オーケストラ ◦ ゲーム・アニメの音楽が多め
  3. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 本日の内容

  4. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 全文検索エンジン(OpenSearch)を利用する上での •

    必要な基礎知識 • OpenSearchの仕組み・設定 について解説します。 後半では、OpenSearchを実際に動かしながら解説していきます。 全文検索をやってみたいという方の参考になれば幸いです。 4
  5. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. アジェンダ 5

    • OpenSearchについて • 全文検索の仕組み • OpenSaerchの仕組み • OpenSearchのIndex設定 • 実際に動かしてみる • まとめ
  6. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchについて 6

  7. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchとは •

    AWSが提供しているフルマネージド全文検索サービスである「Amazon OpenSearch Service」で使用されている全文検索エンジン ◦ ※Amazon Elasticsearch Serviceの後継 • Elastic社が開発しているElasticsearch、およびKibanaのバージョン7.10.2から 派生(フォーク)して実装されている • Apache ライセンスのバージョン 2.0 (ALv2) の下でリリースされている(=オープン ソースソフトウェア) • 機能としては、Elasticsearch7.10.2と同等の機能に加え、独自の機能が実装され ている(次ページ参照) 7
  8. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchの特徴 Elasticsearchにはなかった機能が利用可能(以下抜粋)

    • 暗号化、認証、承認、および監査の機能(Active Directory、LDAP、SAML、 Kerberos、JSON ウェブトークンなど) • SQLクエリ構文が使える(集計、グループ化、WHERE 句など) • バックグラウンドで非同期検索クエリを実行可能 • データを自動的にモニタリングして、ステークホルダーにアラート通知 • 機械学習を使用して、製品レコメンデーション、不正検出、画像および動画検索、関 連ドキュメント検索などが利用可能 https://aws.amazon.com/jp/opensearch-service/the-elk-stack/what-is-opensearch/ 8
  9. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 補足:Elasticsearchについて •

    Elastic社が開発している全文検索エンジン • バージョン7.11以降のライセンスが変更(Apache2.0→Elastic License v2) ※クライアントライブラリのライセンスは引き続きApache2.0のまま • Elastic License 2.0の制約は以下の3つのみ ◦ 製品をマネージドサービスとして他者に提供する行為の禁止 ◦ ライセンスキーによる保護機構を何らかの方法で回避する行為、および、ライセンス キーで保護される機能を削除または隠蔽する行為の禁止 ◦ 使用許諾、著作権、その他の通知を削除、またはわかりにくくする行為の禁止 • バージョン7.11以降はオープンソースとは言えなくなるが、「無償かつオープン」とのこと 9
  10. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchのメリット •

    AWSを既に利用中の場合、導入コストが低い • SQLクエリ構文が使えるので感覚的にも使いやすい • Elasticsearchにはなかった認証機能などもあり、セキュリティが高い • フルマネージドサービスなので、運用・管理が楽(監視にCloudWatchが使える) • 公式のDockerイメージが提供されているので、ローカルでも開発環境の構築が可 能 10
  11. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 全文検索の仕組み 11

  12. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 全文検索の仕組み 全文検索の検索方式には以下の2つがありますが、今回は順次検索には触れません。

    • 索引検索(インデックス型) ◦ 索引(インデックス)を利用して検索する方式 ◦ データ量が多くても検索が高速 ◦ 一般的な全文検索エンジンで使用されている方式 • 順次検索(grep型) ◦ 名前の通りデータの先頭から順番に検索していく方式 ◦ データ量が多い場合は検索に時間がかかる 12
  13. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 索引とは 辞書や技術書等の書籍の一番後ろに付いているやつ

    13
  14. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 索引の作り方 14

    文書データ 文書ID 内容 1 カレーが好き 2 カツカレーが食べたい 3 カツ丼が好き 見出し語(索引語) 文書ID カツ 2, 3 カレー 1, 2 丼 3 が 1, 2, 3 好き 1, 3 食べたい 2 索引データ (転置インデックス) N-Gram 形態素解析 (わかち書き)
  15. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 索引検索の仕組み 15

    <例>「カツカレー」で検索 →「カツ」「カレー」 を両方含む文書を 探す 見出し語(索引語) 文書ID カツ 2, 3 カレー 1, 2 丼 3 が 1, 2, 3 好き 1, 3 食べたい 2 文書ID 内容 1 カレーが好き 2 カツカレーが食べたい 3 カツ丼が好き 索引データ (転置インデックス) 文書データ
  16. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 索引の作り方 -

    形態素解析 辞書を用いて、テキストデータを意味を持つ最小単位の単語(形態素)に分割する手法。 <例> カツカレーが食べたい ⇒「カツ」「カレー」「が」「食べたい」 • 利点 ◦ 検索ノイズが少ない ◦ 転置インデックスのデータ量がN-Gramより小さい ◦ あいまい検索のようないい感じの検索が可能 • 欠点 ◦ 辞書の性能によっては検索されない単語が出てくる(検索漏れ) 16
  17. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 索引の作り方 -

    N-Gram 単語の意味を意識せず、テキストデータを文字数で分割する手法。( Nには分割する文字数の数 字が入る) <例: 2-Gramの場合> カツカレーが食べたい ⇒「カツ」「ツカ」「カレ」「レー」「ーが」「が食」「食 べ」「べた」「たい」 • 利点 ◦ 検索漏れがない(部分一致や完全一致による検索結果が保証できる) • 欠点 ◦ 検索ノイズが多くなる ◦ 転置インデックスのデータ量が形態素解析より大きい ◦ N(最小文字数)より小さい単語では検索できない 17
  18. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 補足: 検索ノイズとは

    ユーザーにとって、「これじゃない」という検索結果のこと。 <例> 東京都 • 形態素解析:見出し語→「東京都」 ◦ 「東京都」を含む文章のみが検索され、「京都」を含む文書は検索されない。 (完全一致が保証される) • 2-Gram:見出し語→「東京」「京都」 ◦ 「京都」を含む文書も検索結果に出てしまうが、ユーザーにとっては不適合情 報。⇒検索ノイズ 18
  19. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 結局どっちがいいの? •

    検索漏れ絶許(業務系システム、ログ分析など) ⇒ N-Gram • いい感じで検索したい(toCのサービスなど) ⇒ 形態素解析 • どっちの利点もほしい ⇒ N-Gram+形態素解析のハイブリット式 ◦ 設定の工夫が必要なので開発コスト高め ◦ インデックス2種類作るので、データ量が大きくなる 19
  20. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchの仕組み 20

  21. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchとは(おさらい+α) •

    AWSが提供しているフルマネージド全文検索サービスである「Amazon OpenSearch Service」で使用されている全文検索エンジン • 分散型(クラスター構成)の検索エンジンである • データの入出力(CRUD)はREST API 21
  22. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchのデータ構造 クラスター構成

    22 Cluster Node (≒Server) Node (≒Server) Node (≒Server)
  23. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchのデータ構造 23

    Node(≒Server) Index(≒Database) Type(≒Table) Document(≒Row) Document Type Document Document OpenSearch RDB Index Database Type Table Document Row Field Column 検索インデックスとは違うも のを指すので注意
  24. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. OpenSearchのIndex設定 24

  25. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. Index(not 検索インデックス)の設定

    サンプルとして、シンプルなデータ構造を定 義します。 ※OpenSearchのデータ操作(CRUD)は REST APIで行う ※前提:OpenSearch Dashboard上で操作 します 25 Index名 デフォルトで用意されている Analyzer ※形態素解析の場合
  26. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. Analyzer(アナライザー)とは •

    文章の分析・変換を行ってくれる機能 • 以下の3つから構成されている ◦ Character filter:文字列をTokenizerで分割する前に必要な処理を行う ◦ Tokenizer:文字列を単語に分割する ※必須設定 ◦ Token filters:Tokenizerで分割された内容に対し、必要な処理を行う • 実行順は以下の通り ◦ Character filter → Tokenizer → Token filters • データ登録(インデックス作成)時、検索時の両方で使用する 26
  27. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. kuromojiとは •

    オープンソース(ALv2)の日本語形態素解析エンジン • 以下のような様々な機能がある ◦ 文字の正規化: ① → 1, ㌢ → センチ ※Character filter ◦ 漢数字を半角数字に変換:六三四 → 634 ※以下、Token filters ◦ 動詞や形容詞を基本形に変換: 食べたい → 食べる ◦ 検索に有用でない単語の除去:カレーが食べたい→「カレー」「食べたい」 ◦ 長音の除去:サーバー → サーバ • OpenSearchのプラグインとして用意されている https://www.atilika.com/ja/kuromoji/ 27
  28. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 実際に動かしてみる 28

  29. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 動かしてみる 実際にOpenSearch

    DashboardのDev Toolsにて、以下の操作を行いながら、解説します • Indexの登録 • Analyzerの動作 • データ登録 • 検索 • SQL構文での検索 29
  30. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. まとめ 30

  31. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. まとめ OpenSearch

    • フルマネージドサービスなので、運用・管理コストが低い • AWS利用中であれば、全文検索機能を実装する上での導入コストは低 い • REST API で操作できるので、既存システムとの連携がしやすい • 用途としては大きく分けると「全文検索」「ログ分析」など 31
  32. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. まとめ その2 OpenSearch利用時の注意点

    • 形態素解析、N-Gramのどちらか、もしくは両方とも使うのかは要件に合わせて 選択すべし • 形態素解析の場合、Analyzerの設定には工夫(チューニング)が必要 • Indexは定義しなくても自動生成されるが、定義しておいた方が良い(Analyzerは 自前でチューニングすべし) • ストレージサイズは、データ量+インデックスサイズで考慮する必要あり 32
  33. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. おまけ Amazon

    OpenSearch Serviceは無料枠があり、手軽に試せるので、ご興味ある方はぜひ触ってみ てください。 • インスタンス ◦ t3.small.search または t2.small.search ▪ 750時間/月まで無料(1ノードであれば1ヶ月31日分無料=基本無料) • ストレージ ◦ Amazon EBS ▪ 10GB/月 まで無料 33
  34. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 質問タイム 34

  35. Copyright (C) 2022 Toranoana Inc. All Rights Reserved. ご清聴ありがとうございました。 35