2013-11-25 27 views
8

複数のフィールドを持つインデックスがあります。そのうちの1つは、 "Electronics"、 "Home"、 "Garden"などの製品のカテゴリ名を格納する文字列フィールドです。などLucene ORブール検索を使用したOR検索

new StringField("category_name", categoryName, Field.Store.YES)); //categoryName is a value such as "Electronics" 

私は名前、価格、およびカテゴリ別に製品を見つけるために、ブールクエリを行っておりますが、私は同時に2つのカテゴリを照会できるように、OR検索を行うするかどうかはわかりません。

私の現在のクエリは次のようになります。

String cat = "Electronics" 
TermQuery catQuery = new TermQuery(new Term("category_name", cat)); 
bq.add(new BooleanClause(catQuery, BooleanClause.Occur.MUST)); // where "bq" is the boolean query I am adding to, I tried .SHOULD but that didn't help either 

これは1つのカテゴリの検索のために正常に動作しますが、私は二つのカテゴリーになり、「電子や家庭を」検索する方法がわからないです。

+2

Ibearの答えが正しいですが、あなたが読みたいと思うかもしれません@ http://searchhub.org/dev/2011/12/28/why-not-and-or Luceneでブール論理がどのように機能するかを理解するために、 – mindas

+0

@mindas、リンクのおかげで、実際には多くの助けになります。答えとして、それは本当に便利だと私はアップ投票することを願っています。 – SoluableNonagon

答えて

22

あなたが好き書くことができます。

BooleanQuery categoryQuery = new BooleanQuery(); 
TermQuery catQuery1 = new TermQuery(new Term("category_name", "Electronics")); 
TermQuery catQuery2 = new TermQuery(new Term("category_name", "Home")); 
categoryQuery.add(new BooleanClause(catQuery1, BooleanClause.Occur.SHOULD)); 
categoryQuery.add(new BooleanClause(catQuery2, BooleanClause.Occur.SHOULD)); 
bq.add(new BooleanClause(categoryQuery, BooleanClause.Occur.MUST)); 
+2

私はこれを複数の投票権を与えることができたらいいと思う。これは魅力のように機能します。 – SoluableNonagon

+0

*まさに私が必要としていて、ドキュメントで見つけることができなかったもの。 –

関連する問題