2010-05-17 69 views
5

使用QueryParser,stemfilter似乎不起作用,並且對於analyzeQueryParser,stop過濾器無效。Lucene QueryParser需要與自定義分析器配合使用stopfilter和porterstemfilter

我的觀察是否正確? 如何解決這個問題?

更新 好所以做了一些代碼實驗。 analyzeQueryParser不允許stopfilter,而QueryParser不允許使用fuzzysearches的porterstemmerfilter。

所以我需要一個QueryParser,它允許模糊搜索以及對porterstemfilter和stopfilter的支持。

+0

如果任何人有對此問題的不同意見,那麼請這樣說:如果他們添加通配符查詢,在這種情況下,你可能想要覆蓋的方法,你可能會遇到與詞幹的問題。 – 2010-05-17 20:30:28

+0

我還沒有用過lucene一段時間,但我記得你需要使用相同的分析器來進行索引和搜索。這可能是問題嗎?請提供 – Dzhu 2011-07-27 12:33:56

+0

更多信息。你是如何得出這樣的結論:事情並不奏效/有效? – 2012-01-10 13:21:42

回答

0

如果需要的話,你可以重寫擴展QueryParser的子類。我能夠與AnalyzingQueryParser使用StopAnalyzer沒有問題:

Analyzer analyzer1 = new StopAnalyzer(Version.LUCENE_30, ImmutableSet.of("foo", "bar", "blop")); 
QueryParser qp = new AnalyzingQueryParser(Version.LUCENE_30, "field", analyzer1); 
Query q = qp.parse("foobar foo bar blop hello"); 
System.out.println("query " + q); 

q = qp.parse("foobar~ foo~ bar~ hell~"); 
System.out.println("query " + q); 

創建查詢:字段:foobar的領域:你好和欄:foobar的〜0.5地獄〜0.5。這是lucene 3.0.3,所以我不確定這是否適用於你的問題。無論如何,我偶然發現這一點,並希望它可以幫助。

@Override 
protected Query getFuzzyQuery(String field, String termStr, float minSimilarity) throws ParseException { 
    return super.getFuzzyQuery(field, termStr, minSimilarity); 
} 

@Override 
protected Query getWildcardQuery(String field, String termStr) throws ParseException { 
    return super.getWildcardQuery(field, termStr); 
}