Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

オートコンプリート用にフィールドをインデックスする方法

項目一覧

  • autocomplete 型のインデックスを定義する
  • autocompleteフィールド プロパティを構成する
  • autocomplete 型の例を試す

Atlas Search autocomplete タイプを使用して、オートコンプリート用に string フィールド内のテキスト値にインデックスを作成できます。 オートコンプリート演算子を使用して、autocomplete タイプとしてインデックス付けされたフィールドをクエリできます。

また、 autocomplete型を使用してインデックスを作成することもできます。

Tip

オートコンプリート演算子を使用して Atlas Search クエリを実行する必要がある場合、このインデックスの構築に時間がかかる場合があります。 あるいは、 autocompleteタイプのみを含む別のインデックスを作成して、インデックスのビルド中に他のインデックスやクエリへの影響を軽減することもできます。

詳しくは、「 Atlas Searchインデックスのパフォーマンスに関する考慮事項 」を参照してください。

Atlas Search は、 autocompleteタイプのフィールドを動的にインデックスしません。 フィールドのインデックスを作成するには、 静的マッピング を使用する 必要 があります。autocompleteAtlas UI のビジュアル エディターまたはJSON エディターを使用して、 autocomplete型のフィールドをインデックスできます。

autocompleteタイプのインデックスを定義するには、Atlas UI で希望する構成方法を選択し、データベースとコレクションを選択します。

  1. [ Refine Your Indexをクリックしてインデックスを構成します。

  2. Field Mappingsセクションで、 Add FieldをクリックしてAdd Field Mappingウィンドウを開きます。

  3. [Customized Configuration] をクリックします。

  4. Field Nameドロップダウンからインデックスするフィールドを選択します。

    注意

    フィールド名の先頭にドル記号($)が含まれるフィールドにはインデックスを付けられません。

    emailまたはurlというタームを含むフィールド名では、Atlas Search Visual Editorでは、メールアドレスまたは URL 値のインデックス作成に、 uaxUrlEmail トークナイザを含むカスタムアナライザを使用することを推奨しています。 Create urlEmailAnalyzerをクリックしてカスタムアナライザを作成し、フィールドのAutocomplete Propertiesに適用します。

  5. Data Typeドロップダウンをクリックし、Autocomplete を選択します。

  6. (任意) フィールドのToken Propertiesを展開して構成します。 詳しくは、「 tokenフィールド プロパティの構成 」を参照してください。

  7. [Add] をクリックします。

以下は、autocomplete タイプの JSON 構文です。デフォルトのインデックス定義を以下のように置き換えます。フィールドの詳細については、「 フィールド プロパティ」を参照してください。

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "autocomplete",
7 "analyzer": "<lucene-analyzer>",
8 "tokenization": "edgeGram|rightEdgeGram|nGram",
9 "minGrams": <2>,
10 "maxGrams": <15>,
11 "foldDiacritics": true|false
12 }
13 }
14 }
15}

Atlas Search autocomplete型は次のパラメータを取ります。

オプション
タイプ
必要性
説明
default

type

string

必須

このフィールド型を識別する、人間が判読できるラベル。 値は string である必要があります。

analyzer

string

任意

このオートコンプリート マッピングで使用するアナライザの名前。 lucene.kuromoji言語アナライザと次のカスタムアナライザトークナイザとトークン フィルターを除く任意の Atlas Search アナライザを使用できます。

lucene.standard

maxGrams

整数

任意

インデックス シーケンスあたりの最大文字数。 この値は、インデックス トークンの文字長を制限します。 maxGrams値より長いタームを検索すると、Atlas Search はトークンをmaxGramsの長さまで切り捨てます。

15

minGrams

整数

任意

インデックス シーケンスあたりの最小文字数。 最小値として4を推奨しています。 4未満の場合、インデックスのサイズが非常に大きくなる可能性があるため、パフォーマンスに影響を与える可能性があります。 edgeGramにはデフォルト値2を推奨します。

2

tokenization

列挙

任意

オートコンプリート用にフィールドをインデックスするときに使用するトークン化戦略。 値は次のいずれかになります。

  • edgeGram - このオートコンプリート マッピングで使用されるアナライザによって区切られた、単語の左側から始まる変数長の文字シーケンスから、 gramsと呼ばれるインデックス可能なトークンを作成します。

  • rightEdgeGram - このオートコンプリート マッピングで使用されるアナライザによって区切られた、単語の右側から始まる変数長の文字シーケンスから、 gramsと呼ばれるインデックス可能なトークンを作成します。

  • nGram - 変数の長さの文字ウィンドウを単語の上でスライドさせて、 gramsと呼ばれるインデックス作成可能なトークンを作成します。 Atlas Search は、 edgeGramまたはrightEdgeGramよりも多くのnGram用トークンを作成します。 したがって、 nGramはフィールドのインデックス作成により多くのスペースと時間を必要とします。 nGramは、長い複合語を含む言語や、スペースを使用しない言語のクエリに適しています。

edgeGramrightEdgeGramnGramは文字レベルで適用されます。 たとえば、次の文章について考えてみましょう。

The quick brown fox jumps over the lazy dog.

2minGrams値と5maxGrams値でトークン化すると、Atlas Search は選択したtokenization値に基づいて次の文字のシーケンスをインデックス化します。

th
the
the{SPACE}
the q
qu
qui
quic
uick
...
og
dog
{SPACE}dog
y dog
zy
azy
lazy
{SPACE}lazy
he
the
{SPACE}the
r the
er
ver
over
{SPACE}over
...
th
the
the{SPACE}
the q
he
he{SPACE}
he q
he qu
e{SPACE}
e q
e qu
e qui
{SPACE}q
{SPACE}qu
{SPACE}qui
{SPACE}quic
qu
qui
quic
quick
...

edgeGramrightEdgeGram 、またはnGramトークン化戦略を使用してオートコンプリート用にフィールドをインデックス化すると、string フィールドをインデックス化するよりも計算コストが高くなります。 インデックスは、通常の string フィールドを含むインデックスよりも多くのスペースを必要とします。

指定されたトークン化戦略では、Atlas Search は次のプロセスを適用して、連続したトークンを発行する前に連結します。 このプロセスは「照合」と呼ばれることもあります。 Atlas Search は、長さがminGrams maxGrams文字と 文字の間のトークンを発行します。

  • トークンをminGrams未満に保持します。

  • minGramsより大きくmaxGrams未満のトークンを後続のトークンに結合し、指定された最大文字数までのトークンを作成します。

edgeGram

foldDiacritics

ブール値

任意

インデックス付きテキストに発音区別符号を含めるか削除するかを示すフラグ。 値は次のいずれかになります。

  • true - インデックスとクエリ テキスト内の発音区別符号を無視します。 発音区別符号の有無にかかわらず結果を返します。 たとえば、 cafèを検索すると、 cafècafeという文字を含む結果が返されます。

  • false - インデックスとクエリ テキストに発音区別符号を含めます。 クエリ内に発音区別符号の有無にかかわらず string と一致する結果のみを返します。 たとえば、 cafèを検索すると、 cafèという文字のみを含む結果が返されます。 cafeを検索すると、 cafeという文字のみを含む結果が返されます。

true

次のインデックス定義の例では、 sample_mflix.moviesコレクションを使用します。 サンプル データがすでにクラスターにロードされている場合は、Atlas UI のビジュアル エディターまたはJSONエディターを使用してインデックスを構成できます。 ご希望の構成方法を選択したら、データベースとコレクションを選択し、インデックスを微調整してフィールド マッピングを追加します。

次のインデックス定義の例では、 titleフィールドのみをautocompleteタイプとしてインデックス化し、オートコンプリート演算子を使用してそのフィールドに対する入力しながら検索するクエリをサポートします。 インデックス定義では、次の項目も指定します。

  • 標準アナライザを使用して、単語境界に基づいてテキスト値をタームに分割します。

  • edgeGramトークン化戦略を使用して、 という単語の左側から始まる文字をインデックス化します。

  • インデックス シーケンスごとに少なくとも3文字をインデックスします。

  • インデックス付きシーケンスごとに最大5文字をインデックス化します。

  • インデックスとクエリ テキストに発音区別符号を含めます。

  1. Add Field Mappingウィンドウで、 Field Nameドロップダウンからtitleを選択します。

  2. Data Typeドロップダウンをクリックし、Autocomplete を選択します。

  3. Autocomplete Propertiesに次の変更を加えます。

    Max Grams

    値を5に設定します。

    最小表示

    値を3に設定します。

    トークン化

    ドロップダウンから [ edgeGram ] を選択します。

    フォールド発音区別符号

    ドロップダウンから [ false ] を選択します。

  4. [Add] をクリックします。

デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。

1{
2 "mappings": {
3 "dynamic": false,
4 "fields": {
5 "title": {
6 "type": "autocomplete",
7 "analyzer": "lucene.standard",
8 "tokenization": "edgeGram",
9 "minGrams": 3,
10 "maxGrams": 5,
11 "foldDiacritics": false
12 }
13 }
14 }
15}

次のインデックス定義の例では、 sample_mflix.moviesコレクションを使用します。 サンプル データがすでにクラスターにロードされている場合は、Atlas UI のビジュアル エディターまたはJSONエディターを使用してインデックスを構成できます。 ご希望の構成方法を選択したら、データベースとコレクションを選択し、インデックスを微調整してフィールド マッピングを追加します。

配列で他の型を指定することで、フィールドを他の型としてインデックスすることもできます。 たとえば、次のインデックス定義は、 titleフィールドを次のタイプとしてインデックス化します。

  • autocomplete オートコンプリート演算子を使用するクエリのオートコンプリートをサポートするタイプ。

  • string タイプ は、 textphraseなどの演算子を使用したテキスト検索をサポートするために使用されます。

  1. Add Field Mappingウィンドウで、 Field Nameドロップダウンからtitleを選択します。

  2. Data Typeドロップダウンをクリックし、Autocomplete を選択します。

  3. Autocomplete Propertiesに次の変更を加えます。

    Max Grams

    値を15に設定します。

    最小表示

    値を2に設定します。

    トークン化

    ドロップダウンから [ edgeGram ] を選択します。

    フォールド発音区別符号

    ドロップダウンから [ false ] を選択します。

  4. [Add] をクリックします。

  5. 手順bからdまでを繰り返します。

  6. Data Typeドロップダウンをクリックし、String を選択します。

  7. デフォルトのString Properties設定を受け入れ、 Addをクリックします。

デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "title": [
6 {
7 "type": "autocomplete",
8 "analyzer": "lucene.standard",
9 "tokenization": "edgeGram",
10 "minGrams": 2,
11 "maxGrams": 15,
12 "foldDiacritics": false
13 },
14 {
15 "type": "string"
16 }
17 ]
18 }
19 }
20}

次のインデックス定義の例では、 sample_mflix.usersコレクションを使用します。 サンプル データがすでにクラスターにロードされている場合は、Atlas UI のビジュアル エディターまたはJSONエディターを使用してインデックスを構成できます。 ご希望の構成方法を選択したら、データベースとコレクションを選択し、インデックスを微調整してフィールド マッピングを追加します。

次のインデックス定義の例では、 emailフィールドのみをautocompleteタイプとしてインデックス化し、オートコンプリート演算子を使用してそのフィールドに対する入力しながら検索するクエリをサポートします。 インデックス定義では、以下を指定します。

  • キーワードアナライザ を使用して、string または string の配列をパラメータとして受け入れ、それらを単一のターム(トークン)としてインデックスします。

  • nGram トークナイザを使用して、テキストを指定されたサイズのチャンク、つまり「n グラム」にトークン化します。

  • インデックス シーケンスごとに少なくとも3文字をインデックスします。

  • インデックス付きシーケンスごとに最大15文字をインデックス化します。

  • インデックスとクエリ テキストに発音区別符号を含めます。

また、 uaxUrlEmailトークナイザを使用してURLとメールアドレスをトークン化することもできます。 詳しくは、「 uaxUrlEmail 」を参照してください。

  1. Add Field Mappingウィンドウで、 Field Nameドロップダウンからemailを選択します。

  2. Data Typeドロップダウンをクリックし、Autocomplete を選択します。

  3. Autocomplete Propertiesに次の変更を加えます。

    analyzer

    ドロップダウンから [lucene.keyword] を選択します。

    Max Grams

    値を15に設定します。

    最小表示

    値を3に設定します。

    トークン化

    ドロップダウンから [nGram] を選択します。

    フォールド発音区別符号

    ドロップダウンから [ false ] を選択します。

  4. [Add] をクリックします。

デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "email": {
6 "type": "autocomplete",
7 "analyzer": "lucene.keyword",
8 "tokenization": "nGram",
9 "minGrams": 3,
10 "maxGrams": 15,
11 "foldDiacritics": false
12 }
13 }
14 }
15}

Tip

その他のインデックス定義例も参照してください

戻る

配列