2013-11-25 45 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

*確切*我需要和不能在文檔中找到。 –