2010-05-17 10 views
5

Con QueryParser, el stemfilter no parece funcionar y con AnalyzingQueryParser, el filtro de detención no es efectivo.Lucene QueryParser necesitaba que funcione con Custom Analyzer con filtro de parada y porterstemfilter

¿Mi observación es correcta? ¿Cómo resolver este problema?

actualización OK Así hizo algunos experimentos con el código. AnalyzingQueryParser no permite stopfilter y QueryParser no permite porterstemmerfilter con fuzzysearches.

Necesito un QueryParser que permita búsquedas difusas junto con soporte para porterstemfilter y stopfilter.

+0

Si alguien tiene una opinión diferente sobre esto, por favor, dígalo. –

+0

No he trabajado con lucene durante algún tiempo, pero sí recuerdo que debe usar los mismos analizadores para la indexación y la búsqueda. ¿Podría ser este el problema? – Dzhu

+0

más información, por favor. ¿Cómo llegaste a la conclusión de que las cosas no funcionan/son efectivas? –

Respuesta

0

Puede anular la extensión de QueryParser subclassing si es necesario. Yo era capaz de utilizar el StopAnalyzer con AnalyzingQueryParser sin problemas:

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

crear la consulta: Campo: Campo de foobar: hola y el campo: foobar ~ 0,5 ~ 0,5 demonios. Este es lucene 3.0.3, así que no estoy seguro de si esto se aplica a su pregunta en ese momento. De todos modos, me encontré con esto y esperaba que podría ayudar. Usted podría encontrarse con problemas con las lematizadores si agregan consultas comodín, en cuyo caso es posible que desee reemplazar los métodos:

@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); 
} 
Cuestiones relacionadas