2012-02-01 56 views
0

我在我的Lucene索引上使用MultiFieldQueryParser在2个字段上进行自由文本搜索,这工作正常。下面是我如何我建立的搜索查询:Lucene - 结合多字段查询与布尔查询

var searchParser = new MultiFieldQueryParser(_currentLuceneVersion, new[] { _titleField, _bodyField }, _standardAnalyzer); 
Query searchQuery = searchParser.Parse(searchText); 

我现在已经添加了一个新的领域,这是一个布尔值(1或0作为字符串),我想我原来的搜索做的一个布尔值过滤器原创自由文本搜索。

我认为这必须使用BooleanQuery完成,然后与原始MultiFieldQueryParser和新BooleanQuery结合使用。

这样做是否正确?

+1

您还可以回复创建'QueryFilter',并给它'Search'方法 – 2012-02-01 11:32:09

+0

谢谢,你能不能给我一个这样的例子? – jcvandan 2012-02-01 13:57:54

+1

像LB说过的,我会构建2个QueryFilters,一个用于0,另一个用于1.然后,让它们保留并重新使用它们。只有在索引更改时,您才需要重建过滤器。 QueryFilter缓存匹配的文档,所以你应该看到使用简单的布尔查询子句 – 2012-02-01 14:02:38

回答

1

一个“假”值QueryFilter的例子

QueryFilter falseFilter = new QueryFilter(new TermQuery(new Term("BOOL_FIELD", "0"))); 
searcher.search(query, falseFilter, maxResults); 
+0

的性能增加,非常感谢,这就像一个魅力 – jcvandan 2012-02-01 14:47:22

+0

我可以问,是否有可能使用多个过滤器? – jcvandan 2012-02-01 14:50:31

+0

是的,使用Lucene.net contrib包中的BooleanFilter,它位于Lucene.Net.Search命名空间中 – 2012-02-01 15:06:25