Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

autocomplete 演算子

autocomplete

autocomplete演算子は、不完全な入力 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

query

文字列または複数の文字列の配列

検索する string または複数の string。文字列に複数の検索タームがある場合、 MongoDB Search は 文字列内の各タームの一致も個別に検索します

はい

path

string

検索するインデックス付きフィールド。 このフィールドは、 autocompleteデータ型としてインデックス付けする必要があります。 詳細については、「オートコンプリート用にフィールドをインデックスする方法 」を参照してください。

autocomplete 演算子は path パラメータで multi または wildcard (*) オプションをサポートしていません。また、path 値としてフィールドの配列をサポートしていません。

複数のフィールドにわたる autocomplete 演算子クエリの例については、「複数のフィールドにわたる検索」を参照してください。

はい

fuzzy

オブジェクト

ファジー検索を有効にします。検索タームやタームに類似した文字列を検索します。

no

fuzzy
.maxEdits

integer

指定した検索タームに一致するために必要となる 1 文字の編集の最大数。値は 1 または 2 になります。

no

2

fuzzy
.prefixLength

integer

結果内の各タームの先頭にあり、完全に一致する必要がある文字数。

no

0

fuzzy
.maxExpansions

integer

生成および検索するバリエーションの最大数。この制限はトークンごとに適用されます。

no

50

score

オブジェクト

一致する検索タームの結果に割り当てるスコア。デフォルトのスコアを変更するには、次のいずれかのオプションを使用します。

  • boost: 結果のスコアに指定された数値を掛けます。

  • constant: 結果のスコアを指定された数値に置き換えます。

  • function: 結果のスコアを指定された式で置き換えます。

autocomplete より高速なクエリの実行と引き換えに、 スコア の忠実度が低くなります。詳しくは、「 スコアリング動作 」を参照してください。

クエリで score を使用する方法については、「結果内のドキュメントのスコアリング」を参照してください。

no

tokenOrder

string

トークンを検索する順序。値は次のいずれかになります。

any

クエリ内のトークンがドキュメント内で任意の順序で表示できることを示します。結果には、トークンが連続して表示されるドキュメントと非連続的に表示されるドキュメントが含まれます。ただし、トークンが連続して表示される結果は、連続していない他の値よりもスコアが高くなります。

sequential

クエリ内のトークンが互いに隣接して表示されるか、ドキュメント内のクエリで指定された順序で表示される必要があることを示します。結果には、トークンが連続して表示されるドキュメントのみが含まれます。

no

any

デフォルトでは、autocomplete 演算子は、bm25 類似性アルゴリズムを使用して、クエリとの関連性に応じてドキュメントにスコアをつけます。

MongoDB Search インデックス定義のautocompleteフィールドのsimilarity.typeプロパティで別の類似性アルゴリズムを指定することにより、使用する類似性アルゴリズムを変更できます。autocomplete型の MongoDB Search インデックスを構成する方法を学ぶには、「オートコンプリートのためのフィールドのインデックス作成方法」を参照してください。

サポートされている類似性アルゴリズムの詳細については、 「スコアの詳細」を参照してください。

完全一致の autocomplete 演算子クエリ結果には、完全一致でない結果よりも低いスコアが与えられます。MongoDB Search は、オートコンプリート インデックスの付いたトークンの部分文字列のみを指定した場合、クエリ文字列がインデックス付きテキストと完全に一致するかどうかを判断できません。 完全一致のスコアを高くするには、以下の回避策を試します。

注意

次の回避策は、すべてのケースで完全一致のスコアが高くなることを保証するものではありません。

  1. フィールドをオートコンプリート タイプと 文字列 タイプの両方としてインデックスします。

    MongoDB Search autocomplete は、autocompleteフィールドも string としてインデックス付けられている場合に完全一致を優先し、完全一致のスコアを増加させます。

  2. 複合演算子を使用してクエリを実行します。

この回避策を示すには、「複数のフィールドにわたる検索」を参照してください。

次の例では、sample_mflix データベースの movies コレクションを使用します。クラスターにサンプル データセットをロードすると、オートコンプリート用の静的インデックスを作成し、クラスターで例のクエリを実行できます。

次のタブには、 edgeGramrightEdgeGram、および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 の文字が含まれる映画を検索します。クエリでは以下を使用します。

フィールド

説明

maxEdits

クエリをドキュメント内の単語に一致させるには、クエリ文字列の pre に 1 文字のバリエーションしかないことを示します。

prefixLength

クエリをドキュメント内の単語と照合しても、クエリ文字列の pre の最初の文字が変更できないことを示します。

maxExpansions

クエリ文字列をドキュメント内の単語と照合する場合に、pre の類似語が最大 256 個考慮されることを示します。

注意

結果は異なる場合があります

MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。

次のクエリは、指定したフィールドで、クエリで指定した文字列を含む単語やフレーズを検索する方法を示しています。

次のクエリは、title フィールドに men with の文字が含まれる映画を検索します。クエリでは tokenOrder フィールドも使用され、このフィールドでは、クエリがトークンを any の順序で検索するか、sequential の順序で検索するかを指定します。

キーワード アナライザーを使用してフィールドにインデックスを付けると、 titleフィールドで用語またはフレーズで始まる映画のタイトルを検索できます

edgeGram次のサンプルクエリの結果を取得するには、 トークン化戦略の キーワードアナライザを使用してフィールドをインデックス必要があります。他の組み込みアナライザを使用してフィールドをインデックスと、 MongoDB Search はテキストフィールドを単一のタームとしてインデックスしないため、結果を返しません。edgeGram トークン化戦略では、単語の左側からトークンが作成されます。

大文字と小文字を区別しない結果を返すには、foldDiacriticstrue に設定する必要があります。foldDiacriticsfalse に設定した場合、 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 & という単語で始まる映画タイトルを検索します。

注意

結果は異なる場合があります

MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。

注意

結果は異なる場合があります

MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。

次のクエリは、movies コレクションの title フィールドで ger の文字を検索し、title フィールドで highlight オプションを有効にします。

重要

パスのオートコンプリート インデックス バージョンを強調表示するには、オートコンプリート演算子がクエリ内でそのパスを使用する唯一の演算子である必要があります。

注意

結果は異なる場合があります

MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。

次のクエリは、複合演算子を使用して、movies コレクションのtitle フィールドと plot フィールドで、文字列inter で始まる単語を検索します。

注意

結果は異なる場合があります

MongoDB Search では、オートコンプリート タイプのインデックス定義で構成されたトークン化戦略に応じて異なる結果が返されます。詳細については、「オートコンプリート用にフィールドをインデックスする方法」を参照してください。

詳しくは、「オートコンプリートおよび部分一致のMongoDB Search クエリの実行方法」を参照してください。

戻る

演算子とコレクター

項目一覧