2012-01-10 43 views
0

我目前使用Lucene的MultiFieldQueryParser跨多個字段搜索相同的查詢(即搜索「值」產生field1:value field2:value field3:value)。但是,這使用not support wild card searches within phrases(即「測試短語*」)的標準QueryParser。所以我試圖使用contrib/misc包中的ComplexPhraseQueryPhrase,它確實支持。但是,它只允許您一次搜索一個字段,就像QueryParser一樣。在Lucene中使用ComplexPhraseQueryParser的多個字段

所以我一直在試圖將兩者結合在一起,製作一個MultiFieldComplexPhraseQueryParser,但我還沒有取得任何成功。有沒有人做過這樣的事情,或者對如何做這件事有任何建議?謝謝!

回答

0

實際上,我是成功的,從一開始走與MultiFieldQueryParser(Lucene的3.0.3):

public class MultiFieldQueryParserTests { 
    @Test 
    public void testMultiFieldQueryParser() throws Exception { 
     MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_30, 
                     new String[] { "field1", "field2", "field3" }, 
                     new WhitespaceAnalyzer()); 
     Query q = parser.parse("test phrase*"); 
     System.out.println("query " + q); 
     q = parser.parse("\"test phrase*\""); 
     System.out.println("query " + q); 
    } 
} 

導致:

query (field1:test field2:test field3:test) (field1:phrase* field2:phrase* field3:phrase*) 
query field1:"test phrase*" field2:"test phrase*" field3:"test phrase*" 

還是我在這裏錯過了什麼?

+0

我認爲不同之處在於分析儀。我現在沒有在我面前,但我很確定我正在使用StandardAnalyzer。 – schmimd04 2012-01-14 01:10:35

+0

分析儀應該不會真的有所作爲,我認爲。據我所知,QueryParser會在將令牌傳遞給分析器之前進行通配符查詢。 – wesen 2012-01-16 12:05:47