2013-11-25 98 views
8

我有一个索引有多个字段,其中之一是一个字符串字段,我在其中存储产品的类别名称......例如“Electronics”,“Home”,“Garden”等Lucene OR搜索使用布尔查询

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

我执行布尔查询来查找名称,价格和类别的产品,但我不知道该怎么办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 

能正常工作的一个类别搜索,但我不知道如何搜索“电子或家庭”,这将是两大类。

+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

*确切*我需要和不能在文档中找到。 –