2010-05-17 14 views
5

QueryParser ile, kök filtresi işe yaramaz ve AnalyzingQueryParser ile durdurma filtresi etkin değildir.Lucene QueryParser özel bir Analizöre ihtiyaç duymaktadır. Özel bir Analizörde stopfiltre ve porterstemfilter ile çalışır.

Gözlemlerim doğru mu? Bu sorun nasıl çözülür?

Güncelleştirme Tamam Kod ile bazı denemeler yaptım. AnalyzingQueryParser, stopfilter'e izin vermez ve QueryParser, porterstemmerfiltreyi fuzzysearches ile izin vermez.

Bu yüzden, porterstemfilter ve stopfiltre desteği ile birlikte bulanık aramalara izin veren bir QueryParser'a ihtiyacım var.

+0

, o yüzden de lütfen: onlar yöntemleri geçersiz kılmak isteyebilirsiniz, bu durumda joker sorguları, eklerseniz sözcük köklerini sorun haline çalışabilir. –

+0

Bir süredir Lucene ile çalışamadım, ama aynı analizcileri hem indeksleme hem de arama için kullanmanız gerektiğini hatırlıyorum. Sorun bu olabilir mi? – Dzhu

+0

daha fazla bilgi lütfen. İşlerin etkili olmadığı sonucuna nasıl geldiniz? –

cevap

0

Gerekirse, alt sınıfı kullanarak QueryParser öğesini genişletebilirsiniz. Ben sorunsuz AnalyzingQueryParser ile StopAnalyzer kullanmayı başardı: merhaba ve saha: saha: filanca alan

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

sorgu oluşturun filanca ~ 0.5 cehennem ~ 0.5. Bu Lucene 3.0.3'tür, bu yüzden bu sorunun sizin için geçerli olup olmadığından emin değilim. Her neyse, bunun üzerine geldim ve yardım edebileceğini umuyordum. Birisi bunu farklı bir görüşe sahip

@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); 
} 
İlgili konular