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