すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:Solr 構文変換

最終更新日:Dec 28, 2024

スキーマ

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 演算子を使用すると、エラーが発生し、結果が返されません。この場合、クエリ文字列の長さの上限を増やすか、複数のクエリを同時に実行して返された結果をマージすることをお勧めします。