Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

キーワード検索をサポートするモデルデータ

項目一覧

  • パターン
  • キーワード インデックスの制限

注意

キーワード検索は テキスト検索 や 検索 と 同一ではFull Text Search なく 、ステミングなどのテキスト処理機能は提供されません。詳細については、「 キーワード インデックスの制限 」セクションを参照してください。

2.4では、 MongoDB にはテキスト検索機能があります。 詳細については、「自己管理型配置テキスト インデックス 」を参照してください。

アプリケーションでテキストを保持するフィールドの内容に対してクエリを実行する必要がある場合は、テキストに対して完全一致を実行するか、 $regexを使用して正規表現によるパターン一致を使用できます。 ただし、テキストに対する多くの操作では、これらのメソッドはアプリケーション要件を満たしていません。

このパターンでは、MongoDB を使用してキーワード検索をサポートする方法の 1 つで、テキストフィールドと同じドキュメント内の配列に保存されているキーワードを使用します。 このパターンをマルチキーインデックスと組み合わせると、アプリケーションのキーワード検索操作をサポートできます。

キーワードベースのクエリをサポートするようにドキュメントに構造を追加するには、ドキュメント内に配列フィールドを作成し、キーワードを配列に string として追加します。 次に、 配列にマルチキー インデックスを作成し、 配列から値を選択するクエリを作成できます。

トピックベースの検索を提供したいライブラリ ボリュームのコレクションがある場合。 各ボリュームに対して、配列topicsを追加し、特定のボリュームに必要な数の キーワードを追加します。

Moby-Dickボリュームの場合、次のドキュメントがある可能性があります。

{ title : "Moby-Dick" ,
author : "Herman Melville" ,
published : 1851 ,
ISBN : 0451526996 ,
topics : [ "whaling" , "allegory" , "revenge" , "American" ,
"novel" , "nautical" , "voyage" , "Cape Cod" ]
}

次に、 topics配列にマルチキー インデックスを作成します。

db.volumes.createIndex( { topics: 1 } )

マルチキー インデックスでは、 topics配列内の各キーワードに対して個別のインデックスエントリが作成されます。 たとえば、インデックスにはwhalingのエントリが 1 つと、 allegoryのエントリが 1 つ含まれています。

次に、キーワードに基づいてクエリを実行します。 例:

db.volumes.findOne( { topics : "voyage" }, { title: 1 } )

注意

数百または数千のキーワードを持つ配列など、多数の要素を含む配列では、挿入時のインデックス コストが高くなります。

MongoDB は、特定のデータモデルとマルチキー インデックスを使用したキーワード検索をサポートできます。ただし、これらの キーワード インデックスは次の点で全文製品に十分ではなく、同等ではありません。

  • ステミング。 MongoDB のキーワード クエリでは、ルートまたは関連単語のキーワードを解析できません。

  • シノニム(同意語) 。 キーワードベースの検索機能は、アプリケーション層内のシノニム(同意語)または関連するクエリのサポートを提供する必要があります。

  • ランキング。 このドキュメントで説明されているキーワード検索では、結果を重み付ける方法は提供されていません。

  • 非同期インデックス作成。 MongoDB はインデックスを同期してビルドするため、キーワード インデックスに使用されるインデックスは常に最新で、リアルタイムで動作できます。 ただし、一部のコンテンツやワークロードでは非同期一括インデックスの方が効率的な場合があります。

戻る

IoT データ