定義
autocompleteautocomplete演算子は、不完全な入力 string からの文字シーケンスを含む単語またはフレーズを検索します。autocomplete演算子を使用してクエリするフィールドは、コレクションのインデックス定義の オートコンプリートデータ 型でインデックス化する必要があります。 オートコンプリート用にインデックスを構成する方法については、「 オートコンプリート用にフィールドをインデックスする方法 」を参照してください。
注意
MongoDB Search では、1 つの文字列に 3 単語を超えるクエリでは、不正確な結果が返される可能性があります。
ユースケース例
入力しながら検索するアプリケーションで autocomplete 演算子を使用すると、アプリケーションの検索フィールドに文字が入力されるにつれて、単語を予測する精度が向上します。autocomplete は、オートコンプリート用のインデックス定義で指定されたトークン化戦略に基づいて、予測された単語を含む結果を返します。
MongoDB Search autocomplete 演算子を使用して推奨候補やドロップダウンをビルドする場合は、推奨される検索タームのコレクションをクエリするか、過去の検索タームを使用してドロップダウンに入力することをお勧めします。推奨される検索期間のコレクションを別途作成すると、MongoDB Searchインデックスで同義語マッピングを定義して、コレクション内で正確な単語または代替単語を検索できます。
構文
autocomplete の構文は次のとおりです。
1 { 2 $search: { 3 "index": "<index name>", // optional, defaults to "default" 4 "autocomplete": { 5 "query": "<search-string>", 6 "path": "<field-to-search>", 7 "tokenOrder": "any|sequential", 8 "fuzzy": <options>, 9 "score": <options> 10 } 11 } 12 }
オプション
フィールド | タイプ | 説明 | 必要性 | default | ||||
|---|---|---|---|---|---|---|---|---|
| 文字列または複数の文字列の配列 | 検索する string または複数の string。文字列に複数の検索タームがある場合、 MongoDB Search は 文字列内の各タームの一致も個別に検索します | はい | |||||
| string | 検索するインデックス付きフィールド。 このフィールドは、
複数のフィールドにわたる | はい | |||||
| オブジェクト | ファジー検索を有効にします。検索タームやタームに類似した文字列を検索します。 | no | |||||
fuzzy.maxEdits | integer | 指定した検索タームに一致するために必要となる 1 文字の編集の最大数。値は | no |
| ||||
fuzzy.prefixLength | integer | 結果内の各タームの先頭にあり、完全に一致する必要がある文字数。 | no |
| ||||
fuzzy.maxExpansions | integer | 生成および検索するバリエーションの最大数。この制限はトークンごとに適用されます。 | no |
| ||||
| オブジェクト | 一致する検索タームの結果に割り当てるスコア。デフォルトのスコアを変更するには、次のいずれかのオプションを使用します。
クエリで | no | |||||
| string | トークンを検索する順序。値は次のいずれかになります。
| no |
|
スコアリングの動作
デフォルトでは、autocomplete 演算子は、bm25 類似性アルゴリズムを使用して、クエリとの関連性に応じてドキュメントにスコアをつけます。
MongoDB Search インデックス定義のautocompleteフィールドのsimilarity.typeプロパティで別の類似性アルゴリズムを指定することにより、使用する類似性アルゴリズムを変更できます。autocomplete型の MongoDB Search インデックスを構成する方法を学ぶには、「オートコンプリートのためのフィールドのインデックス作成方法」を参照してください。
サポートされている類似性アルゴリズムの詳細については、 「スコアの詳細」を参照してください。
完全一致の autocomplete 演算子クエリ結果には、完全一致でない結果よりも低いスコアが与えられます。MongoDB Search は、オートコンプリート インデックスの付いたトークンの部分文字列のみを指定した場合、クエリ文字列がインデックス付きテキストと完全に一致するかどうかを判断できません。 完全一致のスコアを高くするには、以下の回避策を試します。
注意
次の回避策は、すべてのケースで完全一致のスコアが高くなることを保証するものではありません。
フィールドをオートコンプリート タイプと 文字列 タイプの両方としてインデックスします。
MongoDB Search
autocompleteは、autocompleteフィールドもstringとしてインデックス付けられている場合に完全一致を優先し、完全一致のスコアを増加させます。複合演算子を使用してクエリを実行します。
この回避策を示すには、「複数のフィールドにわたる検索」を参照してください。
例
次の例では、sample_mflix データベースの movies コレクションを使用します。クラスターにサンプル データセットをロードすると、オートコンプリート用の静的インデックスを作成し、クラスターで例のクエリを実行できます。
インデックスの定義
次のタブには、 edgeGram、 rightEdgeGram、およびnGram トークン化戦略のサンプル インデックス定義が含まれています。オートコンプリート型に加えて、サンプルのインデックス定義には、title フィールドの文字列型とトークン型が含まれます。
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": [ 6 { 7 "type": "token" 8 }, 9 { 10 "type": "string" 11 }, 12 { 13 "foldDiacritics": false, 14 "maxGrams": 7, 15 "minGrams": 3, 16 "tokenization": "edgeGram", 17 "type": "autocomplete" 18 } 19 ], 20 "plot": [ 21 { 22 "type": "autocomplete", 23 "tokenization": "edgeGram", 24 "minGrams": 2, 25 "maxGrams": 15, 26 "foldDiacritics": true 27 } 28 ] 29 } 30 } 31 }
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": [ 6 { 7 "type": "token" 8 }, 9 { 10 "type": "string" 11 }, 12 { 13 "foldDiacritics": false, 14 "maxGrams": 7, 15 "minGrams": 3, 16 "tokenization": "rightEdgeGram", 17 "type": "autocomplete" 18 } 19 ], 20 "plot": [ 21 { 22 "type": "autocomplete", 23 "tokenization": "rightEdgeGram", 24 "minGrams": 2, 25 "maxGrams": 15, 26 "foldDiacritics": true 27 } 28 ] 29 } 30 } 31 }
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": [ 6 { 7 "type": "token" 8 }, 9 { 10 "type": "string" 11 }, 12 { 13 "foldDiacritics": false, 14 "maxGrams": 7, 15 "minGrams": 3, 16 "tokenization": "nGram", 17 "type": "autocomplete" 18 } 19 ], 20 "plot": [ 21 { 22 "type": "autocomplete", 23 "tokenization": "nGram", 24 "minGrams": 2, 25 "maxGrams": 15, 26 "foldDiacritics": true 27 } 28 ] 29 } 30 } 31 }
➤ [言語の選択] ドロップダウン メニューを使用して、このページの例の言語を設定します。
基本的な例
次のクエリは、title フィールドに off の文字が含まれる映画を検索します。
注意
結果は異なる場合があります
MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。
あいまいな例
基本的な例
次のクエリは、title フィールドに pre の文字が含まれる映画を検索します。クエリでは以下を使用します。
フィールド | 説明 |
| クエリをドキュメント内の単語に一致させるには、クエリ文字列の |
| クエリをドキュメント内の単語と照合しても、クエリ文字列の |
| クエリ文字列をドキュメント内の単語と照合する場合に、 |
注意
結果は異なる場合があります
MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。
部分一致の例
次のクエリは、指定したフィールドで、クエリで指定した文字列を含む単語やフレーズを検索する方法を示しています。
トークン注文の例
次のクエリは、title フィールドに men
with の文字が含まれる映画を検索します。クエリでは tokenOrder フィールドも使用され、このフィールドでは、クエリがトークンを any の順序で検索するか、sequential の順序で検索するかを指定します。
例から始める
キーワード アナライザーを使用してフィールドにインデックスを付けると、 titleフィールドで用語またはフレーズで始まる映画のタイトルを検索できます
edgeGram次のサンプルクエリの結果を取得するには、 トークン化戦略の キーワードアナライザを使用してフィールドをインデックス必要があります。他の組み込みアナライザを使用してフィールドをインデックスと、 MongoDB Search はテキストフィールドを単一のタームとしてインデックスしないため、結果を返しません。edgeGram トークン化戦略では、単語の左側からトークンが作成されます。
大文字と小文字を区別しない結果を返すには、foldDiacritics を true に設定する必要があります。foldDiacritics を false に設定した場合、 MongoDB Search が結果を返すには、クエリタームの大文字と小文字がドキュメント内の大文字と小文字と完全に一致している必要があります。
{ "mappings": { "dynamic": false, "fields": { "title": [ { "type": "token" }, { "type": "string" }, { "foldDiacritics": true, "maxGrams": 7, "minGrams": 3, "analyzer": "lucene.keyword", "tokenization": "edgeGram", "type": "autocomplete" }] } } }
次のクエリは、Fast & という単語で始まる映画タイトルを検索します。
簡単な any の例
注意
結果は異なる場合があります
MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。
簡単な sequential の例
注意
結果は異なる場合があります
MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。
強調表示の例
次のクエリは、movies コレクションの title フィールドで ger の文字を検索し、title フィールドで highlight オプションを有効にします。
重要
パスのオートコンプリート インデックス バージョンを強調表示するには、オートコンプリート演算子がクエリ内でそのパスを使用する唯一の演算子である必要があります。
注意
結果は異なる場合があります
MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。
複数のフィールドにわたる検索
次のクエリは、複合演算子を使用して、movies コレクションのtitle フィールドと plot フィールドで、文字列inter で始まる単語を検索します。
注意
結果は異なる場合があります
MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。
ファセット クエリによるバケット結果
詳細
詳しくは、「オートコンプリートおよび部分一致のMongoDB Search クエリの実行方法」を参照してください。