スキーマ
OpenSearch は、さまざまなデータ型とアナライザーをサポートしており、ほとんどのシナリオの要件を満たしています。次の項目に注意してください。
サポートされているデータ型: INT、INT_ARRAY、FLOAT、FLOAT_ARRAY、DOUBLE、DOUBLE_ARRAY、LITERAL、LITERAL_ARRAY、TEXT、および SHORT_TEXT 型のフィールド。
DynamicField: 動的フィールドはサポートされていません。OpenSearch では、アプリケーションのスキーマを変更できます。したがって、フィールドを動的に変更できます。
CopyField: フィールドのコピーはサポートされていません。したがって、事前にテーブルフィールドをマージできます。
最大 256 個のフィールドが許可されます。OpenSearch アプリケーションに 256 個を超えるフィールドを追加する必要がある場合は、範囲以外のクエリに使用されるフィールドを ARRAY 型の単一のフィールドにマージできます。これにより、アプリケーションに追加されるフィールドの総数を減らすことができます。
patternTokenizer: OpenSearch は、分析用のカスタムアナライザーをサポートしています。ただし、デフォルトの区切り文字は \t です。この場合、元の区切り文字を \t に変換する必要があります。
LOCATION: このタイプのフィールドは、FLOAT または DOUBLE 型の 2 つのフィールドに変換され、経度と緯度の値を格納するために使用されます。
BOOLEAN: このタイプのフィールドは、値が 0 または 1 の INT 型のフィールドに変換されます。
DATE: このタイプのフィールドは、INT 型のフィールドに変換されます。このタイプのフィールドをデータソースから OpenSearch アプリケーションにプッシュすると、フィールドは自動的にミリ秒単位のタイムスタンプに変換されます。API オペレーションを呼び出してフィールドを OpenSearch アプリケーションにプッシュする場合は、手動で変換する必要があります。
ペイロードアナライザー: このタイプのアナライザーはサポートされていません。
ビットワイズアナライザー: このタイプのアナライザーはサポートされていません。
Paoding アナライザー: このタイプのアナライザーは、OpenSearch の中国語基本アナライザーを使用します。
検索構文
OpenSearch は、クエリ、フィルタリング、統計、集計、ソートなどの機能をサポートしています。
q: 必須。このパラメーターは、OpenSearch のクエリと同等です。次の表に、具体的な変換ルールを示します。
q 変換ルール |
: はサポートされていません。 |
範囲インデックスは、フィルターされた範囲に変換されます。 |
+A ==> A |
-A ==> このタイプの変換はサポートされていません。 |
A AND B ==> A AND B |
A AND -B ==> A ANDNOT B |
A OR B ==> A OR B |
A OR +B ==> A RANK B |
A AND B OR C ==> A AND B RANK C。例: Hongfushi AND Apple OR Shandong。 |
A OR B AND C ==> B AND C RANK A。例: Hongfushi OR Apple AND Shandong。 |
A AND B OR +C ==> A AND B AND C。例: Hongfushi AND Apple OR +Shandong。 |
A OR +B AND C ==> B AND C RANK A。例: Hongfushi OR +Apple AND Shandong。 |
+A OR B AND C ==> A AND B AND C。例: +Hongfushi OR Apple AND Shandong。 |
A AND B OR -C ==> (A AND B) ANDNOT C。例: Hongfushi AND Apple OR -Shandong。 |
A AND -B OR C ==> A ANDNOT B RANK C。例: Apple AND -Hongfushi OR Shandong。 |
-A AND B OR C ==> B ANDNOT A RANK C。例: -Hongfushi AND Apple OR Shandong。 |
A OR B AND -C ==> B ANDNOT C RANK A。例: Hongfushi OR Apple AND -Shandong。 |
A OR -B AND C ==> C ANDNOT B RANK A。例: Hongfushi OR -Shandong AND Apple。 |
-A OR B AND C ==> (B AND C) ANDNOT A。例: -Hongfushi OR Shandong AND Apple。 |
A OR B OR -C == A OR -C OR B == -C OR A OR B ==> (A OR B) ANDNOT C |
A AND B OR C AND D ==> A AND B AND C AND D |
fq: 取得されたドキュメントをフィルターします。これはドキュメントの取得に影響しますが、一致スコアの計算には影響しません。フィルターフィールドは、非あいまいクエリに使用されます。クエリフィールドは、あいまいクエリに使用されます。ソート機能を使用する場合は、このフィールドを指定しないでください。
fl: OpenSearch の fetch_fields パラメーターを使用して、戻り値を定義できます。
hl: OpenSearch コンソールでサマリーと HTML タグを設定します。
start と rows: config 句の start と hit に相当します。
wt: config 句の format に相当します。
df: クエリのデフォルトフィールド。
sort: field desc => -field: フィールドタイプに基づいて結果を降順にソートします。field asc => +field: フィールドタイプに基づいて結果を昇順にソートします。score => sort=RANK: ソートされた結果を昇順にソートします。
facet: フィールドに設定する必要があるインデックス属性。
統計変換ルール |
facet.field => OpenSearch の aggregate 句の group_key パラメーター。 |
facet.limit => OpenSearch の aggregate 句の max_group パラメーター。デフォルト値は 1000 です。 |
facet.mincount => サポートされていません。すべての結果を手動で処理する必要があります。 |
facet.offset => サポートされていません。すべての結果に対して手動でページネーションを設定する必要があります。 |
facet.sort => サポートされていません。すべての結果を手動でソートする必要があります。 |
facet=true&facet.field=price&facet.limit=200 ==> aggregate=group_key:price,agg_fun:count(),max_group:200 |
group: サポートされていません。distinct 句と sort 句を使用して、単純なシナリオのデータをソートできます。
stats: 一部の機能は、OpenSearch の aggregate 句の機能と同等です。ただし、agg_func は min、max、count、および avg のみをサポートしています。missing、sumOfSquares、mean、stddev、distinctValue、または countDistinct はサポートしていません。
検索機能
ディープページネーション: OpenSearch は、search と scroll の 2 つのクエリインターフェースを提供します。Search は一般的なクエリシナリオです。このシナリオでは、最大 5,000 件の結果を返すことができます。ページめくりがサポートされています。各ページに最大 500 件の結果を表示できます。Scroll はデータエクスポートシナリオです。このシナリオでは、数千万のデータレコードをエクスポートできます。ソートはサポートされていません。返された結果をさらに分析できます。
統計結果の精度: 検索パフォーマンスを向上させるために、OpenSearch は多くの場合、サンプリングと推定を実行します。これにより、統計結果が不正確になる可能性があります。
検索結果の総数: 検索パフォーマンスを確保するために、OpenSearch はデータの総量に関係なく、クエリに対して返される結果の総数を推定します。
クエリ内の複数の OR 演算子: クエリ文字列の長さは、エンコード後最大 1 KB になります。過剰な OR 演算子を使用すると、エラーが発生し、結果が返されません。この場合、クエリ文字列の長さの上限を増やすか、複数のクエリを同時に実行して返された結果をマージすることをお勧めします。