2

Solr 3.6 を実行しており、結果セットに条件付き並べ替えを適用しようとしています。明確にするために、データは入札のセットであり、現在のユーザーの入札で並べ替えるオプションを追加したいので、通常の並べ替えとして機能することはできません (クエリを実行するユーザーごとに入札が異なるため) )。

結果セットのドキュメントには「CurrentUserId」と「CurrentBid」フィールドが含まれているため、並べ替えるには次のようなものが必要だと思います。

sort=((CurrentUserId = 12345) ? CurrentBid : 0) desc

これは単なる擬似コードですが、Solr の currentUserId がユーザー ID (この例では 12345) と一致する場合は CurrentBid で並べ替え、それ以外の場合は 0 を使用するという考え方です。

次のクエリのようなものを使用して、クエリで並べ替えを行うことが、これを達成する (または少なくともソリューションの一部を形成する) 方法のようです。

http://localhost:8080/solr/select/?q=:&sort=query(CurrentUserId:10330 AND CurrentBid:[1 TO *])+desc

ただし、これは機能していないようで、次のエラーが発生します。

sort param could not be parsed as a query, and is not a field that exists in the index: ...

Solrのドキュメントには、Solr 1.4 以降からクエリ関数を並べ替えパラメーターとして使用できることが示されているため、これは機能するはずです。

これを達成する方法についてのアドバイスは大歓迎です。

4

1 に答える 1

3

あなたが提供したSolrドキュメントのリンクによると、

$otherparam を逆参照するパラメーター、または「v」を介して LocalParams 内のクエリ文字列を直接指定することにより、あらゆるタイプのサブクエリがサポートされます。

したがって、例とクエリに基づいて、次のいずれかまたは両方が機能するはずです。

http://localhost:8080/solr/select/?q=:&sort=query($qq)+desc&qq=(CurrentUserId:10330 AND CurrentBid:[1 TO *])

http://localhost:8080/solr/select/?q=:&sort=query({v='CurrentUserId:10330 AND CurrentBid:[1 TO *]'})+desc

于 2012-10-05T16:45:30.350 に答える