効率的なフィルタリングとソートのためのstringフィールドのインデックス方法
Atlas Search token
タイプを使用して、Atlas Search 結果を並べ替えるための stringフィールドをインデックス化できます。 次に、クエリで $search
sort
オプションを使用して、結果をインデックス付きフィールドでソートできます。 詳しくは、「 Atlas Search結果の並べ替え」を参照してください。 Atlas Search token
タイプを使用してstringフィールドをインデックスし、 $vectorSearch
クエリが分析するデータを事前フィルタリングすることもできます。 詳細については、「 Atlas Vector Search の概要 」を参照してください。
次の演算子を使用してstringフィールドに対してクエリを実行するには、フィールドをAtlas Search token
タイプとしてインデックスする必要があります。
詳細については、それぞれの演算子のドキュメントを参照してください。
token
型の動作を確認する
フィールドをtoken
タイプとしてインデックス化すると、Atlas Search は string 内のタームを単一のトークン(検索可能なターム)としてインデックス化し、効率的なフィルタリングやソート操作のために列指向ストレージに保存します。 正規化を使用してトークンを変換できます。 デフォルトでは、正規表現はnone
に設定されているため、Atlas Search は元の形式で文字列をインデックス化します。
Atlas Search string
型とtoken
型の大きな違いは、Atlas Search ではstring
型としてインデックス付けされたフィールド用に 1 つ以上のトークンが作成されるのに対し、Atlas Search ではtoken
型としてインデックス付けされたフィールドでは 1 つのトークンのみが作成されることです。
token
フィールドタイプとしてインデックス付けされた string が 8181 文字を超える場合、Atlas Search はインデックスを作成する前にその string を 8181 文字に切り捨てます。
token
型の制限を確認する
フィールドをtoken
型としてインデックス化する場合、テキスト、フレーズなどの演算子を使用してテキスト値をクエリするには、そのフィールドもstring
型としてインデックス化する必要があります。 次の演算子では、フィールドのテキスト値をクエリするために、フィールドをstring
型としてインデックスする必要もありません。
embeddedDocuments型としてインデックス作成されたフィールドの子をtoken
型としてインデックスすることはできません。
token
型のインデックスを定義する
token
タイプのインデックスを定義するには、Atlas UI で希望する構成方法を選択し、データベースとコレクションを選択します。
[ Refine Your Indexをクリックしてインデックスを構成します。
Field Mappingsセクションで、 Add FieldをクリックしてAdd Field Mappingウィンドウを開きます。
[Customized Configuration] をクリックします。
Field Nameドロップダウンからインデックスするフィールドを選択します。
注意
フィールド名の先頭にドル記号(
$
)が含まれるフィールドにはインデックスを付けられません。Data Typeドロップダウンをクリックし、Token を選択します。
(任意) フィールドのToken Propertiesを展開して構成します。 詳しくは、「
token
フィールド プロパティの構成 」を参照してください。[Add] をクリックします。
以下は、 token
型の JSON構文です。 デフォルトのインデックス定義を以下のように置き換えます。 フィールドの詳細については、「フィールド プロパティ」を参照してください。
{ "mappings": { "dynamic": true|false, "fields": { "<field-name>": { "type": "token", "normalizer": "lowercase | none" } } } }
token
フィールド プロパティを構成する
Atlas Search token
型は次のパラメータを取ります。
オプション | タイプ | 必要性 | 説明 | default |
---|---|---|---|---|
type | string | 必須 | このフィールド型を識別する、人間が判読できるラベル。値は token でなければなりません。 | |
normalizer | string | 任意 | フィールド値で実行する変換のタイプ。 値は次のいずれかになります。
このオプションを明示的に設定しない場合、デフォルトは | none |
token
型の例を試す
次のインデックス定義の例では、 sample_mflix.moviesコレクションを使用します。 サンプル データがすでにクラスターにロードされている場合は、Atlas UI のビジュアル エディターまたはJSONエディターを使用してインデックスを構成できます。 ご希望の構成方法を選択したら、データベースとコレクションを選択し、インデックスを微調整してフィールド マッピングを追加します。
次のインデックス定義では、 title
フィールドの string 値を Atlas Search token
タイプとしてインデックス化し、フィールド値をlowercase
に変換します。これにより、次の操作が可能になります。
title
フィールドで、normalizer
によって指定された大文字と小文字を区別しないソートを実行します。次の演算子を使用して、
title
フィールドで完全一致クエリを実行します。
Add Field Mappingウィンドウで、 Field Nameドロップダウンからtitleを選択します。
Data Typeドロップダウンをクリックし、Token を選択します。
[ Token Propertiesを展開し、 Normalizerドロップダウンから [
lowercase
] を選択します。[Add] をクリックします。
デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "token", "normalizer": "lowercase" } } } }
次のインデックス定義では、 genres
フィールドをstring
型とtoken
型としてインデックス化し、次の結果を返します。
Add Field Mappingウィンドウで、 Field Nameドロップダウンからgenresを選択します。
Data Typeドロップダウンをクリックし、Token を選択します。
[Add] をクリックします。
ステップ1を繰り返し、 Data Typeドロップダウンから [ String ] を選択します。
String Propertiesのデフォルト設定を確認し、 [ Add ] をクリックします。
デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。
{ "mappings": { "dynamic": false, "fields": { "genres": [{ "type": "string" }, { "type": "token" }] } } }