1

次のクエリを実行しようとしています。

/solr/select?q=_val_:query("{!dismax qf=text v='solr rocks'}", my_field)

ただし、my_fieldデフォルト値として指定すると、エラーがスローされます。

java.lang.NumberFormatException: For input string: "my_field"

さらに、次のクエリも失敗します。

/solr/select?q=_val_:query("{!dismax qf=text v='solr rocks'}", ceil(my_field))
/solr/select?q=_val_:query("{!dismax qf=text v='solr rocks'}", ceil(1.0))

関数クエリで別のフィールドまたは関数をデフォルトとして指定できないでしょうか? 私がやろうとしていることを達成する別の方法はありますか?

Solr3.1を使用しています。

4

2 に答える 2

1

QueryValueSource の ValueSourceParser のコード(261 行目) によると、 の 2 番目の引数はqueryfloat しか指定できません。したがって、 3 または 4.5 は機能しますが、定数ではなく s であるmy_fieldorは機能しません。ceil(1.0)ValueSource

あなたのユースケースが何であるかはわかりませんが、取るmax(query("{!dismax qf=text v='solr rocks'}"), my_field)だけで十分でしょうか? (my_fieldが正の値である場合、結果は、クエリのスコアが の値よりも低い場合にのみ、実行しようとしているものとは異なりますmy_field)

それ以外の場合、この機能が本当に必要な場合は、フロートの代わりに 2 番目の引数として ValueSource を取得するために、QueryValueSourceに基づいて独自の関数を実装するのはかなり簡単です。

于 2012-04-19T21:48:54.800 に答える
0

目的のロジックを模倣する別の方法を見つけました。

/solr/select?q=_val_:sum(query("{!dismax qf=text v='solr rocks'}"),product(map(query("{!dismax qf=text v='solr rocks'}",-1),0,100,0,1), my_field))

少し回りくどい方法ですが、うまくいきます。

于 2012-04-20T14:22:33.963 に答える