2

inStock:trueで高価格のドキュメントを、次のようにブーストしたいと思います。

  • inStock:trueは1です
  • inStock:falseは2です

価格の生成と在庫の数値表現をブースト関数として使用できるようにするには、次のようにします。

document boost = (inStock == true ? 2 : 1) * price

これは可能ですか?ブールフィールドブーストについてはすでに質問がありますが、それは私の要件を満たしていません。

UPDATE1

Solr 4に実装されているSOLR-2136は、条件付き関数(if)用であり、私の場合は簡単です。Solr 4はまだリリースされていないので、回避策はありますか?

UPDATE2:Solrでブールフィールド型を使用しないようにしてください。これは、trueの場合は「T」、falseの場合は「F」を格納します。trueを1に、falseを0にマップするには、map()とord()を使用する必要があります。ブール値にはintを使用し、そうでない場合は「 tブールフィールドでnullを許可し、フィールドのfalse値にインデックスを付けないでください。

4

1 に答える 1

1

はい、回避策があります:

ord() 関数を使用すると、インデックス付きフィールド値のセットに基づいて序数が返されます。

これは、inStock フィールドの「真」の値のみにインデックスを付ける (およびインデックスから false の値を除外する) 場合、inStock フィールドの値が 1 つだけであることを保証できることを意味します。つまり、この値はインデックス位置になります。 of 1 および ord(inStock) は、inStock==true を持つすべてのドキュメントに対して 1 を返します。一方、ドキュメント内で inStock フィールドが使用できない場合、ord() は 0 を返します。

true=1 と false=2 にマップしたい場合は、さらにmap関数を使用して数値を変更できます。

于 2012-04-15T19:09:48.467 に答える