OpenSearch のインデックス管理では、インデックススキーマが検索とフィルタリング向けにフィールドタイプをどのように定義するか、複合インデックスが複数のフィールドにまたがる仕組み、アナライザーがテキストデータとベクターデータをどのように処理するか、そして属性フィールドが filter、sort、aggregate、distinct 操作をどのようにサポートするかについて説明します。
インデックススキーマ
インデックススキーマは、OpenSearch がデータをどのように保存し、取得するかを定義します。2 種類のフィールドで構成されています:
インデックスフィールド — インデックス作成時に分析され、クエリ時に検索されます。全文検索およびキーワード検索に使用します。
属性フィールド — filter、sort、aggregate、distinct の句で使用されます。
フィールドタイプの互換性
どのフィールドタイプがインデックス作成、属性設定、またはその両方をサポートしているかを、次の表に示します。
|
フィールドタイプ |
インデックスフィールド |
属性フィールド |
主な用途 |
|
INT |
はい |
はい |
整数値:範囲検索およびフィルタリング |
|
INT_ARRAY |
はい |
はい |
整数の配列 |
|
FLOAT |
いいえ |
はい |
浮動小数点値:ソートと集計のみ |
|
FLOAT_ARRAY |
いいえ |
はい |
float の配列 |
|
DOUBLE |
いいえ |
はい |
高精度の小数:ソートと集計のみ |
|
DOUBLE_ARRAY |
いいえ |
はい |
double の配列 |
|
TEXT |
はい |
いいえ |
長文テキスト:アナライザーを使用した全文検索 |
|
SHORT_TEXT |
はい |
いいえ |
短い文字列:キーワード検索およびあいまい検索 |
|
LITERAL |
はい |
はい |
完全一致の文字列:フィルタリングおよび検索 |
|
LITERAL_ARRAY |
はい |
はい |
完全一致の文字列の配列 |
|
TIMESTAMP |
はい |
はい |
時刻値:範囲検索および時刻ベースのフィルタリング |
|
GEO_POINT |
はい |
はい |
地理座標:位置ベースの検索 |
複合インデックス
複合インデックスは、複数の TEXT または SHORT_TEXT フィールドにまたがります。OR を使用して複数の単一フィールドインデックスをクエリする場合とは異なり、複合インデックスはすべてのフィールドの結合内容を 1 つの検索可能な単位として扱います。そのため、フィールドをまたぐクエリ用語も一致させることができます。
次のインデックスを持つアプリケーションがあるとします:
title_index—titleフィールドのインデックスbody_index—bodyフィールドのインデックスunion_index—titleとbodyの両方に対する複合インデックス
次のドキュメントがあるとします:
id:123456,title:Open,body:Search
# OR を使用して 2 つの別々のインデックスをクエリしても、ドキュメントは一致しません。
query=title_index:'OpenSearch' OR body_index:'OpenSearch'
# 複合インデックスをクエリすると、ドキュメントが一致します。
query=union_index:'OpenSearch'
OpenSearch という用語は、どちらのフィールド単体にも存在しませんが、複合インデックスは両方のフィールドをまとめて検索することでこの用語を検出します。
複合インデックス内のすべてのフィールドは同じタイプでなければなりません。つまり、すべて TEXT またはすべて SHORT_TEXT のいずれかです。タイプの混在はサポートされません。
アナライザータイプ
テキストアナライザー
テキストアナライザー:テキストアナライザーは、次の領域での検索に向けてテキストを分割します:中国語、英語、一般業界、IT、e コマース、教育。また、次もサポートします:
数値または固定長の値による完全一致検索
あいまい検索
位置、時間範囲、または数値範囲による範囲検索
ベクターアナライザー
ベクターアナライザーは、多次元ベクターに基づいてドキュメントを検索します。2つの設定があります:
一般業界:多次元ベクターに基づいてドキュメントを検索します
教育:256 次元ベクターに基づいて一般ドキュメントを検索します
トークン化なしの完全一致
フィールドをトークン化せずに完全一致させるには、オフラインでの変更を申請し、フィールドタイプを[LITERAL]に、アナライザーを[キーワードアナライザー]に設定します。キーワードアナライザーを使用すると、フィールド値全体が 1 つのトークンとして扱われるため、そのフィールドに対するクエリでは、トークン化された一致ではなく完全一致が必要になります。
フィールドタイプの変更はコンソールでは行えないため、この設定を適用するにはオフライン変更プロセスが必要です。保存しても、変更はすぐには反映されません。
その他の場合にも、トークン化を回避できます:
To avoid tokenization for only part of a field's content, use a custom analyzer together with intervention entries and disable secondary tokenization. See Custom analyzers.
To avoid tokenization for an entire query term, wrap the term in double quotation marks, for example,
query=default:"OpenSearch". See Index recall - query clauses.
属性フィールド
属性フィールドは次の句をサポートします:
|
句 |
目的 |
|
|
フィールド値で結果をフィルタリングします。例: |
|
|
フィールドに対する統計を計算します |
|
|
フィールド値で結果をソートします |
|
|
フィールドに基づいて結果を重複排除します |