Lucene.Net BooleanClause问题

时间:2010-08-16 19:06:59

标签: lucene.net lucene

我遇到了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。因此,两个查询一起应返回特定类型的文档并在标题中包含特定单词,但它返回标题中具有特定单词的所有类型。

1 个答案:

答案 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);