Si está utilizando StandardAnalyzer
, descartará caracteres que no sean alfanuméricos. Intente indexar el mismo valor con un WhitespaceAnalyzer
y vea si eso conserva los caracteres que necesita. También podría mantener cosas que no desea: ahí es cuando podría considerar escribir su propio Analizador, lo que básicamente significa crear una pila TokenStream que haga exactamente el tipo de procesamiento que necesita.
Por ejemplo, el SimpleAnalyzer
implementa las siguientes tuberías:
@Override
public TokenStream tokenStream(String fieldName, Reader reader) {
return new LowerCaseTokenizer(reader);
}
cuales sólo menores-casos los tokens.
El StandardAnalyzer
hace mucho más:
/** Constructs a {@link StandardTokenizer} filtered by a {@link
StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */
@Override
public TokenStream tokenStream(String fieldName, Reader reader) {
StandardTokenizer tokenStream = new StandardTokenizer(matchVersion, reader);
tokenStream.setMaxTokenLength(maxTokenLength);
TokenStream result = new StandardFilter(tokenStream);
result = new LowerCaseFilter(result);
result = new StopFilter(enableStopPositionIncrements, result, stopSet);
return result;
}
Usted puede mezclar & partido de estos y otros componentes en org.apache.lucene.analysis
, o puede escribir sus propios TokenStream
instancias especializadas que se envuelven en una canalización de procesamiento por su aduana Analyzer
.
Otra cosa a mirar es qué tipo de CharTokenizer
estás usando. CharTokenizer
es una clase abstracta que especifica la maquinaria para tokenizar cadenas de texto. Es utilizado por algunos Analizadores más simples (pero no por el StandardAnalyzer
). Lucene viene con dos subclases: un LetterTokenizer
y un WhitespaceTokenizer
. Puede crear el suyo propio que conserve los caracteres que necesita y rompe aquellos que no implementa el método boolean isTokenChar(char c)
.
Por favor, den un ejemplo de lo que está buscando y de lo que se crea. ¿Qué quiere decir con "query as +"? – morja
Estoy buscando caracteres especiales como +! ? etc. Bueno, tengo la solución. En realidad, estamos usando un analizador personalizado y debido a los filtros aplicados, nos estaba dando una consulta blanck (+()). Pero cuando utilicé KeywordAnalyzer funcionó. ** ¿Alguna información sobre cómo se ingresa? ** – user660024
¿Está utilizando el mismo analizador para la indexación y la consulta? Agregue un ejemplo de código que describa su consulta exacta y cómo la procesa antes de llamar a la búsqueda. –