2010-08-16 61 views
1

我遇到了Lucene.Net和BooleanQuery的問題。這是我的代碼:Lucene.Net BooleanClause問題

BooleanQuery query = new BooleanQuery(); 

String[] types = searchTypes.Split(','); 

foreach (string t in types) 
     query.Add(new TermQuery(new Term("document type", t.ToLower())), BooleanClause.Occur.SHOULD); 

這應該主要是一個或聲明通過具有一定的類型,對自己的工作證件去。但是,我也有此查詢:

Query documentTitleQuery = new WildcardQuery(new Term("title", "*" + documentTitle.ToLower() + "*")); 
query.Add(documentTitleQuery, BooleanClause.Occur.MUST); 

它搜索標題中的單詞。這兩個查詢都可以自行查找。當它們一起使用時,似乎Lucene將documentTitleQuery視爲OR。因此,兩個查詢一起應該返回特定類型的文檔,並在標題中包含特定詞語,但它會返回標題中包含特定詞語的所有類型。

回答

2

使用布爾查詢的一個更加層組中的兩個:

BooleanQuery topQuery = new BooleanQuery(); 
... 
BooleanQuery query1 = new BooleanQuery(); 
... 
BooleanQuery query2 = new BooleanQuery(); 
... 
topQuery.add(query1, BooleanClause.Occur.MUST); 
topQuery.add(query2, BooleanClause.Occur.MUST); 
+0

謝謝,完全成功了! – 2010-08-16 19:19:20