6

Solr FunctionQueryにはDIV(x、y)関数があります。y = 0の場合、yはxと等しくなければなりません。

つまり、FunctionQueryを使用して次のロジックを表す必要があります。

if y == 0, return 1 /* i.e. DIV(x,x) */
else, return DIV(x,y)

どういうわけか、Solrのドキュメントから、使用するEQ(x、value)などの比較関数が見つかりません。

FunctionQueryを使用して目的のロジックを構築するためのヒントを誰かに教えてもらえますか?

ありがとう!

4

3 に答える 3

4

Srikanth Venugopalanのコメントに感謝して、この質問を整理し、私の最終的な解決策を記録します。

実際には、引数を切り替える必要があります。Exposure_count=0はfalseとして解釈されます。したがって、条件は{!boost b = if(exposure_count、div(1、exposure_count)、1)}"になります。

どうやら、LucidWorksのドキュメントには間違いがあります。FunctionQueryパーサーは、==などの比較演算子を取りません。少なくとも、これはソースコードを調べて見つけたものです。また、IF()関数のフィールド区切り文字は、;(セミコロン)ではなく、(コンマ)である必要があります。

公式のSolrwiki正しいです。

于 2013-03-20T09:52:42.137 に答える
2

文字列項の場合、これは機能します:

if(termfreq(フィールド名,"値"),2,1)

"value" が "fieldname" に含まれている場合は 2 になります (termfreq は >0 になります)

于 2014-01-28T12:38:29.577 に答える
0

以下のように、equals および if 条件文に == を使用できます:-

例えば if(y == 0; 1; DIV(x,y))

例 @ドキュメントを確認してください

if(color=="red"; 100; if(color=="green"; 50; 25)):
この関数はドキュメント フィールド「色」をチェックし、「赤」の場合は 100 を返し、「緑」の場合は 50 を返し、それ以外の場合は 25 を返します。

編集 :-

wiki でセパレータとして , (コンマ) が言及されている場合はSolr

例えばif(exists(myField),100,0)

于 2013-03-20T03:58:00.223 に答える