我遇到了Lucene.Net和BooleanQuery的问题。这是我的代码:
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);
这基本上应该是一个OR语句,它通过具有特定类型的文档,这些文档可以自行运行。但是,我也有这个问题:
Query documentTitleQuery = new WildcardQuery(new Term("title", "*" + documentTitle.ToLower() + "*"));
query.Add(documentTitleQuery, BooleanClause.Occur.MUST);
搜索标题中的单词。这两个查询都可以自行查找。当它们一起使用时,似乎Lucene将documentTitleQuery视为OR。因此,两个查询一起应返回特定类型的文档并在标题中包含特定单词,但它返回标题中具有特定单词的所有类型。
答案 0 :(得分: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);