2010-05-14 13 views
6

Estoy usando la API de Lucene.NET directamente en mi aplicación web ASP.NET/C#. Cuando busco usando un comodín, como "fuc *", el resaltador no resalta nada, pero cuando busco la palabra completa, como "fucsia", resalta bien. ¿Lucene tiene la habilidad de resaltar usando la misma lógica con la que solía coincidir?¿Cómo puedo obtener Lucene (.NET) para resaltar correctamente con comodines?

Otros código-fragmentos quizá relevantes siguientes:

var formatter = new Lucene.Net.Highlight.SimpleHTMLFormatter(
    "<span class='srhilite'>", 
    "</span>"); 

var fragmenter = new Lucene.Net.Highlight.SimpleFragmenter(100); 
var scorer = new Lucene.Net.Highlight.QueryScorer(query); 
var highlighter = new Lucene.Net.Highlight.Highlighter(formatter, scorer); 
highlighter.SetTextFragmenter(fragmenter); 

y después de cada golpe ...

string description = Server.HtmlEncode(doc.Get("Description")); 
var stream = analyzer.TokenStream("Description", 
    new System.IO.StringReader(description)); 
string highlighted_text = highlighter.GetBestFragments(
    stream, description, 1, "..."); 

y estoy usando el QueryParser y la StandardAnalyzer.

Respuesta

4

deberá asegurarse de configurar el método de reescritura del analizador en SCORING_BOOLEAN_QUERY_REWRITE.

Este cambio parece haberse vuelto necesario desde que apareció Lucene v2.9.

Espero que esto ayude,

+0

Errr ... ¿cómo? Por lo que he visto en los documentos, necesito un MultiTermQuery para meterse con eso, pero solo tengo una consulta. ¿Debería probar el tipo de MultiTermQuery y lanzarlo? –

+0

Probé a ciegas: query = parser.Parse (searchText); if (query.GetType() == typeof (Lucene.Net.Search.PrefixQuery)) { (consulta (Lucene.Net.Search.PrefixQuery)) .SetRewriteMethod (Lucene.Net.Search.PrefixQuery.SCORING_BOOLEAN_QUERY_REWRITE); } y empeoró las cosas. –

+2

En realidad, quise configurar el estilo de reescritura en el analizador. es decir, utilizando el método SetMultiTermRewriteMethod del objeto analizador. HTH –

Cuestiones relacionadas