solr sort,i want 特定のドキュメントを最初に指定する
例えば:
結果 : 5,2,3,1
最初に2つ欲しい,その他はルールに従ってソート
2,1,3,5
これを行う方法 ?
solr sort,i want 特定のドキュメントを最初に指定する
例えば:
結果 : 5,2,3,1
最初に2つ欲しい,その他はルールに従ってソート
2,1,3,5
これを行う方法 ?
Solr 3.1 以降を使用している場合は、関数 query で並べ替えることができます。そんな時に便利なのがマップ機能。
sort=map(field_name,5,5,0) asc
上記で、field_name
はソートするフィールドの名前、 は5
前面に押し出したい値であり、0
他のすべての数値よりも小さいことがわかっている数値に置き換える必要があります。
Solr を使用してこれに取り組む方法を 2 つ知っています。
1 つ目はQueryElevationComponentを使用することです。これにより、インデックス時に上位の結果を定義できます。ドキュメントで示唆されているように、これはスポンサー付きの結果や人気のあるドキュメントを検索結果の上部に配置するのに適しています. 潜在的な欠点は、これらのドキュメントをクエリ時ではなくインデックス時に識別できなければならないことです。
もう 1 つの方法は、クエリ時にbq パラメータを使用して目的のドキュメントをブーストすることです。ドキュメント 435 をブーストするには、次のようにします。
...&bq=id:435^10
残念ながら、これらのアプローチでは、結果の順序を完全に制御することはできません。
検索を実行した後に結果を処理することを気にしないのであれば、Riking が提供するソリューションは確かに役に立ちます。検討できるもう 1 つの方法は、表示順序または優先度を定義するフィールドを Solr スキーマに追加することです。次に、そのフィールドで並べ替えて、目的の並べ替え順序を取得できます。
組み込みの sort() 関数を呼び出してから、目的の要素を前に移動します。
前にシフトする組み込みメソッドがない場合の疑似コード:
tmp = desired;
int dIndex = array.indexOf(desired);
for(i=dIndex-1; i >= 0; i--)
{
array[i+1] = array[i]
}
標準クエリ (dismax ではない) を使用する場合は、「OR id:2^1000」をクエリに追加します。このような:
q=(text:lalala AND author:Bob) OR id:2^1000
これにより、ID=2 のドキュメントが結果の一番上に配置されます。