概要
並べ替え句を使用して、クエリ結果の並べ替えルールを設定できます。並べ替えルールでは、クエリ結果の並べ替え基準となるフィールドと並べ替え順序を指定します。並べ替え順序には、昇順と降順があります。
構文
並べ替え句の構文: +field1;-field2
field1 と field2 は、クエリ結果の並べ替え基準となるフィールドです。プラス記号 (+) は、クエリ結果が field1 に基づいて昇順で並べ替えられることを指定します。マイナス記号 (-) は、クエリ結果が field2 に基づいて降順で並べ替えられることを指定します。
フィールドは、加算 (+) 、減算 (-) 、乗算 (*) 、除算 (/) などの基本的な算術演算子で連結できます。演算子で連結されたフィールドは、同じデータ型である必要があります。
OpenSearch は多次元並べ替えをサポートしています。これは、並べ替え句に複数の並べ替えルールを含めることができることを示します。並べ替えルールはセミコロン (;) で区切る必要があります。クエリ結果は、最初に並べ替え句の最初の並べ替えルールに基づいて並べ替えられます。クエリ結果の最初の指定フィールドの値が同じ場合、クエリ結果は 2 番目の並べ替えルールに基づいて並べ替えられます。このプロセスは、すべてのクエリ結果が適切に並べ替えられるまで続きます。
クエリ結果は、RANK フィールドに基づいて並べ替えることもできます。RANK フィールドの値は並べ替え式によって計算され、結果の関連性を示します。
制限事項
並べ替え句は省略可能です。クエリに並べ替え句が含まれていない場合、クエリ結果はデフォルトで RANK フィールドに基づいて降順で並べ替えられます。クエリに RANK フィールドを含まない並べ替え句が明示的に含まれている場合、定義されている並べ替え式は有効になりません。
並べ替え句で使用されるフィールドは、アプリケーションのスキーマで属性フィールドとして指定されているフィールドである必要があります。
戻り値が INT 型または FLOAT 型の機能関数は、並べ替え句のフィールドとして使用できます。
並べ替え句に LITERAL 型のフィールドが含まれている場合、クエリ結果の文字はアルファベット順に並べ替えられ、数字は各桁の数字に基づいて 1 つずつ並べ替えられます。漢字は、American Standard Code for Information Interchange (ASCII) 値に基づいて並べ替えられます。
ほとんどのシナリオでは、並べ替え句は ARRAY 型のフィールドをサポートしていません。
sort=-field1;-field2;-field3 などの多次元並べ替えのパフォーマンスは、各フィールドの特性によって異なります。したがって、多次元並べ替えのパフォーマンスは保証されません。並べ替え式を使用することをお勧めします。たとえば、normalize(field1)*100+normalize(field2)*10+normalize(field3)+first_phase_score*10000 のような精密な並べ替え式を定義できます。この式では、first_phase_score は、粗い並べ替え式によって計算されたスコアを指定します。詳細については、精密な並べ替え関数 を参照してください。
サポートされている機能関数
distance: 2 つの地点間の球面距離を返します。一般的に、この関数は位置情報サービス (LBS) の距離計算で使用されます。
例:
次のクエリはレストランを検索します。distance 関数は、距離に基づいてクエリ結果を昇順で並べ替えるために使用されます。
query=default:'Restaurant name'&&sort=+distance(lon,lat,"120.34256","30.56982")
tag_match: タグに基づいてクエリ句とドキュメントを照合し、一致したタグの重みを計算することでドキュメントをスコアリングします。
例 (関数の詳細を表示するには、上記のリンクをクリックしてください):
sort=-tag_match("user_options", options, "mul", "sum", "false", "true", 100)
例
アプリケーションで「浙江大学」を含むドキュメントをクエリし、結果をタイプ別に昇順で並べ替えます。一部のドキュメントのタイプが同じ場合は、テキストの関連性でドキュメントを並べ替えます。詳細については、並べ替えポリシーの設定 を参照してください。
query=default:'浙江大学'&&sort=+type;-RANK // 精密な並べ替え式は text_relevance(field) にすることができます。
アプリケーションで「浙江大学」を含むドキュメントをクエリし、結果をヒット数とコメント数の合計で降順に並べ替えます。
query=default:'浙江大学'&&sort=-(hits+comments)