2012-02-01 57 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