que example lucene lucene.net

example - Handling+como personaje especial en la búsqueda de Lucene



lucene que es (3)

¿Cómo me aseguro de que lucene me devuelva resultados de búsqueda relevantes cuando mi cadena de entrada contiene términos como c ++? Lucene parece ignorar los caracteres ++.

Detalles del código: cuando ejecuto esta línea, obtengo una consulta de búsqueda en blanco.

queryField = multiFieldQueryParser.Parse(inpKeywords); keywordsQuery.Add(queryField, BooleanClause.Occur.SHOULD);

Y aquí está mi analizador personalizado:

public class CustomAnalyzer : Analyzer { private static readonly WhitespaceAnalyzer whitespaceAnalyzer = new WhitespaceAnalyzer(); public override TokenStream TokenStream(String fieldName, System.IO.TextReader reader) { TokenStream result = whitespaceAnalyzer.TokenStream(fieldName, reader); result = new StandardTokenizer(reader); result = new LowerCaseFilter(result); result = new StopFilter(result, stop_words); return result; } }

Y estoy ejecutando la consulta de búsqueda de esta manera:

indexSearcher.Search(searchQuery, collector);

Intenté queryField = multiFieldQueryParser.Parse (QueryParser.Escape (inpKeywords)) ;, pero todavía no funciona. Aquí está la consulta que se ejecuta y devuelve cero visitas. "+ (())"

Gracias.


Pruebe con la codificación UTF-8 de sus consultas de búsqueda.

Puede habilitar esto como se describe en este artículo


Además de elegir el analizador adecuado, puede usar QueryParser.Escape(string s) para asegurarse de que todos los caracteres especiales se hayan escapado correctamente.

Como esta es una función estática , puede usarla, incluso si está utilizando MultiFieldQueryParser.

Por ejemplo, puedes probar algo como esto:

queryField = multiFieldQueryParser.Parse(QueryParser.Escape(inpKeywords));


Como + es un personaje especial, necesita ser escapado. La lista de todos los personajes que deben escaparse está aquí (ver la parte inferior de la página).

También debe tener cuidado con el analizador que usa durante la indexación. Por ejemplo, StandardAnalyzer omitirá + . Es posible que necesite utilizar algo como WhiteSpaceAnalyzer durante la indexación y la búsqueda, lo que preservará los caracteres especiales en tokenstream. Tenga en cuenta que debe usar el mismo analizador durante la indexación y la búsqueda.