2010-08-16 57 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