2011-06-01 10 views
0

私はluceneで次のブール型クエリを実行しようとしていますが、失敗するようです。助けてください。Boolean検索でLucene

(AまたはB)とc - >が

正常に動作します(AとB)またはc - >とBまたはCのために結果を提供します。だからaは必須になり、bとcは必要になり、検索結果は間違っています。 aのように動作する必要がある場所では、bが利用可能でなければならず、cが利用可能である必要があります。

もう一つの例:

あなたが検索し、 "(AとB)" それはあなたが "C" を検索し、それはyは

あなたが検索した場合に結果が返されます場合は、xが

を結果が返されます場合は

"(aおよびb)またはc"の場合、結果の数はxまたはyのうち大きい方の値より小さくできません。しかし、これは起こっていない。これを実装するにはどうすればよいですか?

+0

bとcは検索している実際の値ですか? – PVR

答えて

0

(a AND b)またはcは(+a +b) cに変換されます。あなたが望むのは、かっこなしの+a +b cです。

論理的な観点からは、「AとBが発生しなければならない」というCが発生する可能性があります。「AとBが発生していなければなりません。 (古典論理では "真実かもしれません"と言う方法はありません)。したがって、(+a +b) cをブール値で表現するのは難しいでしょう。あなたがそれをすることができる1つの方法は、 "(AND b AND c)または(a AND b)"です。

+0

あなたの応答Xodarapに感謝します。しかし、私の理解は、いずれかのドキュメントが<"a AND b">または<"c">のすべてのドキュメントであり、これらはすべてこのブール検索結果に表示されるはずですが、これは起こっていません。 論理的な観点から、AとBが発生するか、またはCのみがドキュメント内に存在する場合、これらのドキュメントはすべて結果セットに返されます。 – ranjit

+0

@ranjit: '(+ a + b)c'のようにやってみましたか?それは、問題がどこにあるかを少なくとも絞り込むことになります。私はいくつかのクエリパーサーでORは大文字にする必要があると思います。これはあなたの例にはありません。 – Xodarap