ランク付けと並べ替え (FAST Search Server 2010 for SharePoint)

FAST Search Server 2010 for SharePoint のクエリ結果を並べ替える方法について説明します。

最終更新日: 2011年9月1日

適用対象: SharePoint Server 2010

この記事の内容
クエリ要求で並べ替えを指定する方法
ランクでの検索結果の並べ替え
管理プロパティの値での検索結果の並べ替え
式表現での検索結果の並べ替え
ランダムに検索結果を並べ替え

以下の 4 つの方法で、FAST Search Server 2010 for SharePoint のクエリ結果を並べ替える方法を指定することができます。

適用先: Microsoft FAST Search Server 2010 for SharePoint

クエリ要求で並べ替えを指定する方法

Query Web サービスを使用する場合、「Microsoft.Search.Query スキーマの SortByProperties 要素」を使用して並べ替え条件を指定します。この要素には、並べ替え仕様でそれぞれ 1 つのレベルを表す、1 つ以上の SortByProperty 要素が含まれます。

クエリ オブジェクト モデルを使用する場合は、KeywordQuery クラスの SortList プロパティを使用して並べ替え条件を指定します。このプロパティは、並べ替え仕様でそれぞれ 1 つのレベルを表す、Sort オブジェクトのコレクションを返します。

並べ替え仕様に複数のレベルがある場合、並べ替えは、並べ替え仕様に表示された順序で実行されます。最初のレベルに基づいて並べ替えたら、次のレベルは、最初のレベルで指定した並べ替え条件に対するものと同じ値を持つ結果にのみ関連します。

並べ替え仕様の各レベルで、個別の並べ替えの方向を指定することができます。

ランクでの検索結果の並べ替え

既定の並べ替えメカニズムでは、関連性 (ランク) でクエリ結果を並べ替えます。これは、FAST Search Server 2010 for SharePoint がクエリ結果セットでもっとも関連性が高い結果を最初に挿入するということです。関連性のランク付けを調整する方法の詳細については、「FAST Search Server 2010 for SharePoint での関連性の向上」を参照してください。

既定のランキング プロファイルとは異なるランキング プロファイルを使用する必要がある場合は、並べ替え仕様のランキング プロファイルの名前を指定することができます。

ランクで並べ替える場合、結果は常に降順で並べ替えられます。

ランキング プロファイルを使用するのに加えて、ランク計算をクエリ文字列に組み込むこともできます。これを行うには、次の 2 つの方法を使用できます。

  • FAST クエリ言語 (FQL)RANK 演算子または XRANK 演算子。これらの演算子を使用して、特定のクエリ条件が満たされた場合に、条件付きランク昇格を適用できます。

  • 動的ランク付けの関連性の重み。FAST クエリ言語 (FQL) を使用する場合、STRING 演算子ごとに個々の関連性の重みを指定できます。

管理プロパティの値での検索結果の並べ替え

クエリ結果の 1 つ以上の管理プロパティの値に基づいた、クエリ結果の並べ替えを指定することができます。これは、FAST Search Server 2010 for SharePoint がクエリと一致するすべての結果に基づいて並べ替えを実行するということです。

テキストおよび数値のプロパティに基づいて、並べ替えることができます。テキストプロパティでは、並べ替えは標準的なテキスト文字列の並べ替えに基づきます。(Datetime 型の管理プロパティを含む) 数字プロパティでは、並べ替えは数値に基づきます。

式表現での検索結果の並べ替え

並べ替え値を数学的な式を使用して作成する並べ替え仕様に基づいて、クエリ結果並べ替えを指定することができます。

式での並べ替えは、クエリ結果の単一レベルおよび複数レベルの並べ替え機能の拡張です。この機能は、並べ替え条件として、管理プロパティの代わりに、式を指定できるようにします。

式での並べ替え機能を使用することで、クエリ結果内の各アイテムの 1 つ以上の管理プロパティの値に、数学的な演算を行うことができます。

以下は、この機能によって実装できる機能の例です。

  • ドキュメントを分類するための、K ニアレスト ネイバー アルゴリズム。

  • 地理的な距離を計算するためのユークリッド距離あるいはマンハッタン距離。

  • 推奨の値。たとえば、その値から特定の管理プロパティ値がどれだけ離れているかに基づいてドキュメントを並べ替えるための値。

この機能には、語句の頻度と近接度のような、統計的な動的ランク パラメーターのコントロールは含まれません。

式は左から右の順に評価され、一般的な数学演算子の優先度が使用されます。つまり、関数とカッコで囲まれたグループが最初に評価され、乗算と除算が次に行われ、最後に加算と減算が行われます。

重要重要

式の最終的な結果は、32 ビットの符号付き整数の値範囲である必要があります。それ以外の場合は、適切に並べ替えられないことがあります。

クエリでの並べ替えの式の指定

クエリ要求の並べ替え仕様で、管理プロパティの代わりに並べ替えの式を指定します。

並べ替え仕様の形式は次のとおりです。

[formula:<sort-formula>]

形式内の <sort-formula> は、並べ替えの式表現です。

注意

角かっこは並べ替え仕様構文の一部です。

既定の並び替え方向は、Descending です。また、たとえば、式で地理的な距離を指定する場合など、昇順の値で並べ替えを行う式を使用することもできます。

次の例は、SortByProperties 要素を使用し、Query Web サービス要求に、昇順の並べ替え順序による式での並べ替えを指定する方法を示しています。

<SortByProperties>
  <SortByProperty name="[formula:abs(2000-size)]" direction="Ascending" /> 
</SortByProperties>

並べ替え仕様をクエリに追加する方法の詳細については、「クエリ要求で並べ替えを指定する方法」を参照してください。

式で管理プロパティを使用する

Integer、Decimal、および Datetime 型の管理プロパティの値で、並べ替えの式を適用することができます。インデックス スキーマ で指定された管理プロパティの並べ替えを有効にする必要があります。

Decimal 型の管理プロパティでは、式評価で使用される前に、その値に 10^ (10 進数) が掛けられます。

Datetime 型の管理プロパティでは、式評価で使用される前に、その値は紀元前 29000 年 1 月 1 日からのナノ秒を 100 で割った数に変換されます。その年は 366 日あります。

並べ替えの式表現

表 1 は、並べ替えの式表現で使用できる関数を示します。式にはスペースを含めることはできません。

表 1. 並べ替えの式表現の関数

関数

説明

+

加算を指定します。

-

減算を指定します。

*

乗算を指定します。

/

除算を指定します。

注意

既定では、ゼロによる除算は例外となり、エラーを含むクエリが返されます。errtolast 演算子を使用することにより、クエリ エラーを回避し、代わりに結果セットの最後に問題があるアイテムを挿入することができます。

rank

アイテムの動的ランクを表す特殊なキーワード。

例: abs(rank-100) では、並べ替え条件としてランク値 100 からの距離を使用します。

[0-9.]+

数が、整数あるいは倍精度値として示されることを指定します。

例: 503、3.14、5.4352262

[a-z0-9]+

関数名として認識されない文字の連続を、管理プロパティ名として扱うように指定します。インデックス スキーマ (FAST Search Server for SharePoint) で指定された管理プロパティの並べ替えを有効にする必要があります。

例: 並べ替えを有効にして、height という名前の管理プロパティを定義することができます。これにより、式で表現として "height" を使用できるようになります。式は、height 管理プロパティの値を使用します。

( and )

適切な優先度を保証しつつ、計算をグループ化するために使用されます。

例: 4*(3+2)

sqrt(n)

n の平方根。

exp(n)

pow(2.71828182846,n) と同等の指数関数。

log(n)

n の自然対数。

abs(n)

n の絶対値。

ceil(n)

n の CEILING 値。つまり、n が自然数ではない場合は、次の自然数に端数を切り上げます。n が自然数の場合は、n を使用します。

floor(n)

n の FLOOR 値。つまり、n が自然数ではない場合は、次の自然数に端数を切り下げます。n が自然数の場合は、n を使用します。

round(n)

n を、最も近い偶数の整数に四捨五入します。"Bankers rounding (銀行家の丸め)" や "Round Half to Even (偶数丸め)" とも呼ばれます。

sin(n)

n ラジアンのサイン。

cos(n)

n ラジアンのコサイン。

tan(n)

n ラジアンのタンジェント。

asin(n)

ラジアンでの、n のアークサイン。

acos(n)

ラジアンでの、n のアークコサイン。

atan(n)

ラジアンでの、n のアークタンジェント。

pow(x,y)

x を y 乗にした値。

atan2(y,x)

正の x 軸と指定された直交座標 (x、y) 間の、ラジアンでの角度の、2 つの引数を持つアークタンジェント。

bucket(b,n1,n2,…)

表現の、特定の値の分布範囲での、不連続の値を示すために使用する演算子。

表現 b は、管理プロパティあるいはその他の式表現です。引数 n1, n2, … は、数字でのしきい値を示しています。任意の数のバケットしきい値を指定することができます。

入力表現 b の値は、もっとも近い数字のしきい値に四捨五入されます。最小のしきい値より低い場合、結果の値はゼロです。

errtolast(x)

式の例外を処理する方法を制御するために使用する演算子。x は、任意の式表現です。この式表現の計算が、ゼロで除算のような、結果セット内のアイテムの数学的な例外を発生させた場合、指定された並べ替え方向にかかわらず、これらのアイテムは並べ替えリストの最後に現れます。

式での並べ替えのパフォーマンス特性

並べ替えの式を使用することは、式計算が結果セット内のすべての一致アイテムに適用されることを意味します。これは、クエリと一致するアイテムの数により、クエリがパフォーマンスに影響するということです。

多くの演算子を含む長い式は、短い式より多くの処理時間を必要とします。

地理的な距離に式での並べ替えを使用する

式での並べ替えを使用して、距離に基づくランク付けを適用することができます。これには、各アイテムの緯度と経度を表す管理プロパティが含まれる必要があります。

たとえば、以下の一般的な式を使用することができます。

  • マンハッタン距離。

  • ユークリッド距離。例 2 を参照してください。

  • 半正矢の式。

重要重要

緯度と経度の値には整数型の管理プロパティを使用する必要があります。コンテンツ側では、外部パイプライン拡張コンポーネントで緯度と経度の値を整数値に変換できます。クエリ側では、クエリ クライアントで同じ変換を行うことができます。

次の例は、Query Web サービス要求で並べ替えの式を指定する方法を示しています。

例 1. 結果リストの上位に、20 にもっとも近い height 管理プロパティを持つアイテムを挿入します。

<SortByProperties>
  <SortByProperty name="[formula:abs(20-height)]" direction="Ascending" />
</SortByProperties>

例 2. 管理プロパティの latitude、longitude、および height に指定された位置情報に基づいて、特定の基底位置 (ユーザーの位置など) からの真 3D ユークリッド距離によって並べ替えを行います。次の式は、基底位置が 50/100/200 (緯度/経度/高さ) の場合の 3D ユークリッド距離を提供します。

sqrt(pow(50-latitude,2)+pow(100-longitude,2)+pow(200-height,2))

距離に基づいた結果の並べ替えを適用する (式内で距離と他のパラメーターを組み合わせない) 場合は、sqrt() コンポーネントを削除できます。これを削除しても、並べ替え順序は変更されないためです。これにより、クエリのパフォーマンスが向上します。

<SortByProperties>
  <SortByProperty name="[formula:pow(50-latitude,2)+pow(100-longitude,2)+pow(200-height,2)]"
                  direction="Ascending" />
</SortByProperties>

**例 3.**size の値をバケットとして丸くし、値 0、5、15、50、100 のいずれかになるように値を切り捨てます。最も大きい値を先頭にして、並べ替えを行います。

<SortByProperties>
  <SortByProperty name="[formula:bucket(size,5,15,50,100)]" direction="Ascending" />
</SortByProperties>

Query Web サービスでの式での並べ替えの使用

[チュートリアル] クライアント アプリケーションから FAST Search Server にクエリを実行する」の手順に従って、コードを拡張し、例 1 で前に示したように式での並べ替え仕様を追加します。

式での並べ替え仕様をクエリに追加するように、queryXML2 文字列の定義を置き換えます。

   // queryXML2 is the part of the XML after the query string.
   string queryXML2 = @"
         </QueryText>
      </Context>
      <ResultProvider>FASTSearch</ResultProvider>
      <Range>
         <Count>10</Count>
      </Range>
      <SortByProperties>
         <SortByProperty name='[formula:abs(20-height)]' direction='Ascending' />
      </SortByProperties>
   </Query>
</QueryPacket>";

ランダムに検索結果を並べ替え

クエリ結果のランダムな並べ替えを適用するか、ランダム コンポーネントを結果の並べ替えに追加できます。

ランダムな並べ替え仕様の形式は次のとおりです。

[random:seed=<seed>:hashfield=<managed property>:addtorankmax=<max random value>]

注意

角かっこは並べ替え仕様構文の一部です。

表 2 では、ランダムな並べ替え仕様のパラメーターについて説明します。

表 2. ランダムな並べ替え仕様のパラメーター

パラメーター

説明

必須

seed

ランダム値生成のシード。

シード値は、ランダム値を生成する関数に入力されます。このランダム値は最終的な並べ替えで使用されます。

seed オプションのみを使用すると、ランダムで並べ替えられたクエリ結果セットが提供されます。同じクエリの並べ替え順序は (同じシードを使用している場合)、インデックスの更新後に変更される可能性があります。

はい

hashfield

ランダム生成のハッシュ値として使用される管理プロパティ。

このパラメーターを使用すると、同じクエリの並べ替え順序は (同じシードを使用している場合)、インデックスが更新されても変更されません。

管理プロパティは整数型である必要があります。また、インデックス スキーマで並べ替えが有効になっている必要があります。

この管理プロパティは、ランダムまたは一意の値 (たとえば、アイテム処理ステージで設定されるシーケンス番号) に設定する必要があります。

いいえ

addtorankmax

クエリ結果の制限付きランダム化を適用する必要がある場合は、このパラメーターを使用します。この場合、結果は引き続きランクで並べ替えられます。

0 (ゼロ) から、このパラメーターで指定された値の間のランダム値が、結果セットの各アイテムのランク値に追加されます。これにより、間隔内で結果をランダム化できます。

注意

クエリ結果で提供されるのは元の (並べ替える前の) ランク値です。ランダム値が含まれるランクではありません。

いいえ

同じシードを同等のクエリに対して提供すると、同じ順序でアイテムが提供されます。これにより、検索結果をページングするときに同じランダム順序を保持できます。クエリ間でインデックス更新が誤って発生したときに同じランダム順序を保持する必要がある場合は、hashfield パラメーターを使用します。

次の例は、Query Web サービス要求でランダムな並べ替えを指定する方法を示しています。

例 1. 結果セット全体のランダムな並べ替え。

<SortByProperties>
  <SortByProperty name="[random:seed=5432]" />
</SortByProperties>

例 2. 検索セット全体のランダムな並べ替え。インデックスの切り替えが発生しても、同じシードの同じクエリについては同じランダムなシーケンスを保持します。hashvalue という名前のカスタム管理プロパティは、インデックス スキーマで使用できる必要があります。また、インデックス付けされたすべてのアイテムに対して、ランダムまたはシーケンシャルな数値が設定されていなければなりません。

<SortByProperties>
  <SortByProperty name="[random:seed=6543:hashfield=hashvalue]" />
</SortByProperties>

例 3. 0 から 200 までのランダム値を各アイテムのランク値に追加します。これにより、検査結果の順序が限られた範囲内で変更されます。

<SortByProperties>
  <SortByProperty name="[random:seed=1234:addtorankmax=200]" />
</SortByProperties>

関連項目

参照

Microsoft.Search.Query スキーマの SortByProperties 要素

FASTSearchRuntime

概念

FAST Search Server 2010 for SharePoint での関連性の向上

インデックス スキーマ (FAST Search Server for SharePoint)

外部アイテム処理コンポーネントの統合

[チュートリアル] クライアント アプリケーションから FAST Search Server にクエリを実行する

その他の技術情報

FAST クエリ言語 (FQL)