新製品・アップデートのご紹介MongoDB は、Voyage AI の買収を通じて、Atlas における生成 AI アプリケーションの精度と信頼性を強化します。詳しく見る >>
新着情報今すぐチェック!:AI 対応開発向け MongoDB MCP Server(パブリックプレビュー)ブログを読む >>
新着情報MongoDB 8.0:圧倒的な速度と性能を提供。詳しく見る >>

全文検索の概要と機能

無料で始める

世界的に生成されるデータ量が幾何学的に増加していることは周知の事実です。実際、2025年末までに、史上初めて181ゼタバイトのデータが存在することとなると推定されています(ちなみに、1ゼタバイトは10垓バイトに相当します)。そして、その181ゼタバイトのうち80%が非構造化データになると予測されています。

(出典: K21Academy.com、2023年)

しかし、これはあらゆる種類のデータユーザーにとっての重大な問題も浮き彫りにしています。非構造化データ、具体的には非構造化テキストデータは、従来のリレーショナルデータベースに格納することも、クエリを実行することもできません。さらに、完全なテキスト一致のみを検索する従来のクエリは、ユーザーがテキストデータ内で検索しているトピックや重要なアイデアしか知らないことが多いため、あまり役に立ちません。

この問題を解決するのが全文検索です。全文検索を使用すると、非リレーショナル NoSQL データベースにデータが最適に保存されている間、ユーザーは直感的かつ効率的な方法で非構造化テキストデータにアクセスできます。全文検索とは何か、どのように機能するか、その使用例について、以下で学びましょう。

目次

単語やフレーズが完全に一致することに依存する従来の検索方法とは異なり、全文検索とは、全文クエリのレンジに関連するすべてのドキュメントの内容を検索することを指します。これには、トピック、フレーズ、引用、または追加のテキスト属性が含まれます。

全文検索を実行する方法はさまざまです。各タイプにはそれぞれの利点があり、ツールボックス内のツールと同じように、特定のニーズに対処するように設計されています。最も一般的なタイプをいくつか紹介します。

  • 単純な全文検索:単純な全文検索は、ユーザーがキーワードやフレーズを入力して、それらの特定の用語を含むドキュメントを検索するという非常に基本的なものです。

    • 最適な用途:一般的な情報を探すクイック検索としてよく使用されます。

  • ブール全文検索:このタイプの検索では、ブール演算子 (AND、OR、NOT など) を使用して、検索クエリ内の特定のキーワードを結合または除外します。これにより、検索結果の制御が向上するだけでなく、ユーザーが幅広いトピックを求めている特定の情報に絞り込むのにも役立ちます。

    • 最適な用途:項間の論理的な関係を使用する複雑なクエリでよく使用されるブール全文検索は、ユーザーが時間を節約し、クエリの関連性を高めるのに役立ちます。

  • ファジー検索:ファジー検索を使用すると、ユーザーは「可能性が高い」一致であるテキストを見つけることができます。つまり、目的の期間内のスペルミスやタイプミスなどを分析して、ユーザーのパラメーターに一致させることができます。

    • 最適な用途:これらの検索は、非伝統的なスペル、誤字、その他の不規則な表現が含まれることが多いドキュメントを検索する際に役立ちます。

  • ワイルドカード検索:ワイルドカード検索には、単語の不明な部分を表す英数字以外の文字(?、* など)が含まれます。これにより、ユーザーは単語のバリエーション(part、parted、parting など)や部分一致(summertime、summer vacation、summer など)を検索できます。

    • 最適な用途:ユーザーが単語のさまざまな形式を考慮したい場合や、スペルの違いを修正したい場合に役立ちます。

  • フレーズ検索:この検索は、クエリされたフレーズの単語が指定された順序でドキュメント内に現れる正確なフレーズを検索します。

    • 最適な用途:フレーズ検索は、長いドキュメント内のコンテキスト的に関連する用語を検索するクエリ(例:IRS Web サイト内で「2024 income tax brackets」を検索するなど)でよく使用されます。

  • 近接検索:近接検索では、指定された数単語、フレーズ、または段落内に特定の期間が含まれるドキュメントを識別して抽出します。

    • 最適な用途:近接検索は、幅広いトピックに関する長いドキュメントを検索する際に、結果を絞り込むのに役立ちます。たとえば、海洋保全に関する論文には、あらゆる種類の海洋環境(例:深海、河口、マングローブ)に関する情報が含まれる場合がありますが、マングローブの保全に関する情報を探す際に近接検索インデックスを使用することで、最も関連性の高いマングローブの情報をドキュメントから抽出できます。

  • レンジ検索:レンジ検索では、ユーザーが指定した数値またはアルファベットの範囲内にある用語を検索します。

    • 最適な用途:日付、通貨値、英数字の医療コーディングなどのレンジがユーザーの関心対象である場合、レンジ検索が役立ちます。

  • ファセット検索:このタイプの検索は、あらかじめ定義されたカテゴリとトピックの特定の属性(ファセットなど)を使用して結果を絞り込むのに役立ちます。

    • 最適な用途:これらの検索は、eコマースで日常的に使用されます(例:M サイズ、コットン、ボタンダウン、ブルー、ドレスシャツ)。M サイズ、ブルー、ドレスシャツなどの記述子または属性はすべて、ユーザーが求める衣類のファセットです。

全文検索クエリ

全文検索クエリは、全文検索内で使用され、ユーザーが必要とする特定の期間、パラメーターなどを定義します。さらに、全文検索クエリを使用すると、以下を含む複数のメソッドを通じて、ユーザーが認識していない可能性のある追加コンテンツを見つけることができます。

  • 自然言語処理(NLP):全文検索では、全文検索クエリ内の単語とドキュメント内のテキストの文脈、意味、および単語間の関係を理解するために、NLP技術がよく組み込まれています。これにより、ユーザーが全文検索クエリに含めるべき特定の用語やフレーズを知らない場合でも、正確で文脈に即した結果が得られます。

  • 同義語の展開:全文検索エンジンでは、多くの場合、同義語を展開する機能が使用されます。これは、全文検索エンジンが、ユーザーの全文検索クエリに含まれる単語と同じ意味を持つ別の単語やフレーズ(例:同義語)を識別できることを意味します。関連する検索語句がこのように展開されることで、ユーザーが最初の全文クエリにこれらの特定の単語(例:同義語)を含めていなくても、より関連性の高い情報が収集されます。

  • オントロジーとタクソノミー:オントロジーまたはタクソノミーを使用すると、用語の関係に基づいて用語を階層にグループ化するのに役立ちます。これらの階層を使用すると、ユーザーのクエリに関連する広範な用語と狭義の用語の両方を返すことができるため、全文検索が強化されます。これにより、正確でより包括的な結果セットが提供されます。

  • ファジー一致:ファジー一致アルゴリズムを使用すると、データベースエンジンはクエリの近似検索用語の一致を見つけることができます。つまり、スペルミスのある単語、見落とされたタイプミス、または実際にはクエリと一致するものの従来の検索では見落とされてしまうその他の言語のバリエーションを含むコンテンツが識別され、ユーザーのために収集されます。

  • 関連性ランキング:関連性ランキングでは、高度なアルゴリズムを使用して、ユーザーのクエリに関連する予期しないが高く関連性の高い情報を含む可能性のあるドキュメントを特定するために、ドキュメント内の用語の使用頻度や用語の近接性などの要素を考慮します。

これらの技術の組み合わせにより、全文検索システムの関連情報発掘能力が向上し、ユーザーが調査対象トピックの広さや深さを完全に理解していない場合でも、非構造化テキストデータの探索と発見において強力なツールとなります。

全文検索のインデックス作成

全文検索には、多数のドキュメントと膨大な量のテキストのレビューが含まれます。Web 検索サービスでは、 Web ページのコンテンツやオンラインのPDFなど、インターネットから関連する結果を抽出するために、全文検索がよく使用されます。大量のテキストデータを扱うため、検索ボリュームを処理するを技術が必要です。これを全文インデックス作成と呼びます。全文検索インデックスは、大量のテキストデータを高速かつ効率的に検索できるようにする特殊なデータ構造です。

全文検索インデックスを作成するには、データセットの各テキストフィールド(例:ドキュメント)を分析します。まず、発音区別符号(フランス語の é、à、ç など、文字の上または下に配置される記号)が削除されます。次に、テキストが書かれている言語に基づいて、アルゴリズムがフィラー(埋め草)単語を除去し、タームの語幹のみを保持します。このようにして、「to eat」と「eating」は同じ語根「eat」として分類されます。

次に、すべてのテキストがすべて大文字または小文字のテキストに変換されます。全文検索インデックスの開発に使用する特定のアナライザによっては、追加の手順が含まれる場合もあります。

最後にインデックスが作成され、各用語(単語、語句など)がドキュメント内のどこにあるかを示す参照が保存されます。

全文インデックスの特性の概要

ドキュメントへの用語のマッピング:全文テキストインデックスの主な機能は、用語(例: 単語、フレーズ、数字)をそれらが存在するドキュメントにマッピングすることです。インデックスの作成中、ドキュメントの内容がレビューされ、用語とそれぞれのドキュメントの間のリンクが作成されます。

クエリ速度の向上:全文インデックスが作成されると、ユーザーの検索クエリに関連するドキュメントをすばやく検索して取得できるようになります。すべてのドキュメントや Web ページの内容をすべてスキャンする代わりに、検索エンジンはインデックスを参照して、指定された用語を含むドキュメントをすばやく特定できます。

最適化:クエリ速度の向上に加えて、インデックス速度とストレージ効率を向上させるための追加の最適化が適用されます。データキャッシュ、データ圧縮、その他のデータ構造の最適化は、最高クラスの全文検索システムを構築するためによく使用されます。

全文検索インデックスのタイプ

選択可能な全文インデックスにはさまざまなタイプがあります。全文インデックス方法を選択する際には、検索要件、データ型とボリューム、クエリの複雑さがユーザーにとって重要な検討事項となります。さらに、パフォーマンスを最適化し、データストレージの問題に対処するために、複数のインデックス作成方法を採用することを選択するユーザーもいます。一般的な全文インデックスには、転置インデックスと B 木インデックスがあります。

転置インデックス:転置インデックスが最も一般的に使用されます。これらのインデックスは、用語とそれらが含まれるドキュメントとのマッピングを保存します。これにより、検索中の高速な検索(つまり、すべてのドキュメントではなくインデックスを検索)が可能になり、検索処理が最適化されます。

転置インデックス内で舞台裏の追加機能には、次のようなものがあります。

  • 圧縮:データ圧縮手法が適用され、インデックスデータのストレージ要件が削減されます。
  • 位置情報:選択した用語がドキュメント内のどこに出現するかに関する追加情報が含まれており、近接クエリおよびフレーズクエリを実行できます。
  • 出現頻度:用語をマッピングするのではなく、ドキュメントをマッピングします。これは、ドキュメントに用語が出現する回数を分析する際に役立ちます。
  • N グラム:テキストは N グラム(つまり、連続する文字または単語のシーケンス)に分割されます。例として、「The slow tortoise beat the lazy hare」というフレーズは、N-1 の「Tortoise beat the lazy hare」、N-2 の「The slow tortoise beats」、N-3 の「Tortoise beats the lazy」などに分割できます。N グラムのインデックスの作成により、部分一致とワイルドカードクエリが可能になります。
  • B木およびB+木:B木およびB+木は、全文検索がリレーショナルデータベースに統合されている場合によく使用されます。特に、レンジクエリ(例:日付範囲、通貨値の範囲)によく使用されます。

全文検索の例

全文検索にはさまざまな用途があります。たとえば、転置インデックスを使用すると、レストランのメニューの料理を検索したり、e コマース Web サイトのアイテムの説明にある特定の機能を検索したりできます。特定のキーワードの検索に加えて、あいまいテキスト検索や同義語などの検索機能を全文検索に追加できます。この例では、「pasta」のような単語の結果は、「Pasta with meatballs」のような項目だけでなく、「Linguine Carbonara」といった同義語や「Psta」のようなあいまい検索の結果も返すことがあります。

オープンソースの検索ライブラリである Apache Lucene の例では、レストランのメニュー項目を特定するために転置インデックスを使用し、一致するあらゆるドキュメントの広範な用語集として機能します。

メニュー項目の類似した全文検索の完全な機能デモは、https://www.atlassearchrestaurants.com/ で確認できます。

SQL で全文検索を実装する

SQL データベースでレストランメニューの全文検索の例を実装するには、インデックスを作成する各列に全文インデックスを作成する必要があります。MySQL では、FULLTEXT キーワードを使用してこれを行います。

その後、MATCH と AGAINST を使用してデータベースをクエリできるようになります。

 

 

このインデックスはクエリの検索速度を向上させますが、期待されるすべての追加機能を提供するわけではありません。ファジー検索、入力ミスの許容、類義語などの機能を使用するには、データベースの上に Apache Lucene などのコア検索エンジンを追加する必要があります。

MongoDB Atlas で全文検索の例を実装する

MongoDB Atlas で全文検索エンジンを実装するには、ボタンをクリックするだけです。ユーザーは右側のナビゲーションパネルを開き、「データ」の「検索とベクトル検索」を選択できます。そこから「検索インデックスを作成」をクリックしてプロセスを開始します。

 

インデックスが作成されたら、$search オペレーターを使用して全文検索を実行できます。

 

 

 

このアグリゲーションは、MongoDB Atlas Search で使用される最も単純なクエリです。リッチクエリ(タイプミスの許容、検索用語の強調表示同義語検索など)も構築できます。舞台裏で Atlas Search は Apache Lucene を使用しているため、エンジンを自分で追加する必要はありません。

MongoDB Atlas アカウントをお持ちでない場合は、今すぐ無料でサインアップできます。アカウントの設定が完了したら、Atlas Search Restaurant Finder のデモで Atlas Search を試すことができます。また、映画検索アプリケーションの構築方法に関するチュートリアルを使用して、その実装方法を学習することもできます。

全文検索ソリューションを実装する前に、必要な機能、アーキテクチャの複雑さ、全文検索に関連するコストを検討することが重要です。ここでは、各考慮事項を説明するために、MongoDB Atlas Searchの例を使用します。

必要な機能

データベースに全文検索インデックスを追加すると、テキスト検索が最適化され、ストレージ要件が最小限に抑えられる可能性があります。それでも、オートコンプリートの提案、同義語検索、関連性の高い結果を得るためのカスタムスコア設定など、追加の機能が必要になる場合があります。MongoDB Atlas Search の例をいくつか挙げます。

さらに詳しく知りたいですか?MongoDB Atlas Search の機能の完全なリストをご利用いただけます。

アーキテクチャの複雑さ

コンポーネントを追加すると、アプリケーションが複雑になります。アプリケーションに全文検索機能を提供するには、インデックス作成を処理し、結果を提供する追加レイヤーが必要です。

MongoDB Atlas Search を使用すると、すべてがデータベースに統合されます。ソフトウェア開発者がどこにクエリを実行するかを心配する必要はありません。従来のデータと同じように、通常の集計パイプラインを使用してデータにアクセスできます。

この追加レイヤーを削除することで、ソフトウエア開発が簡素化され、アーキテクチャ内のさまざまなコンポーネントを実装および維持するための関連オーバーヘッドを回避できます。

コスト

ソリューションを社内で構築する場合でも、サードパーティのツールを使用する場合でも、追加のコストが発生することが予想されます。一方で、ソリューションを社内で開発する場合、開発期間、ミス、総作業時間の観点から高いコストが発生する可能性があります。逆に、オープンソースのソリューションでも、統合、保守などの面でコストがかかります。そのため、多くのソフトウェア開発チームは、実装と保守に必要な労力が最小限で済む既製のソリューションから始めます。サードパーティのソリューションの固定コストは、決まった納期と組み合わせることで、最も合理的な選択肢となる場合があります。適切な全文検索ソリューションを評価する際は、これらすべての要因を必ず考慮してください。

MongoDB Atlas Search のようなソリューションを使用すると、根底にあるインフラストラクチャの保守と関連するトレーニングが不要になるため、コストを削減できます。また、ほとんどの開発チームは MongoDB を使用してデータをクエリすることにすでに慣れているため、開発チームの立ち上げも容易になります。

詳しく見る

全文検索を強化する方法を確認する準備はできましたか?検索基礎スキルバッジを取得しましょう。また、学習に役立つ追加のリソースもいくつかご紹介します。

よくある質問

今すぐ Atlas を利用する

すぐに利用を開始することができます。無料のクラスターには 512 MB のストレージが付属しているため、サンプル データを使用してプラットフォームに慣れ親しんでいただけます。
無料トライアルご相談・お問い合わせ
トライアルには以下が含まれています。
  • 世界中の 115 以上のリージョンで利用可能
  • サンプルデータセット
  • 常時認証
  • エンドツーエンドの暗号化
  • コマンドラインツール