2010-05-14 5 views
6

Sto usando l'API Lucene.NET direttamente nella mia applicazione web ASP.NET/C#. Quando cerco utilizzando un carattere jolly, come "fuc *", l'evidenziatore non evidenzia nulla, ma quando cerco l'intera parola, come "fucsia", si evidenzia bene. Lucene ha la capacità di evidenziare usando la stessa logica con cui è stato utilizzato?Come si ottiene Lucene (.NET) per evidenziare correttamente con i caratteri jolly?

Vari forse rilevanti code-frammenti di seguito:

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

e quindi su ogni colpo ...

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, "..."); 

E sto usando il QueryParser e la. StandardAnalyzer

risposta

4

è necessario assicurarsi di impostare il metodo di riscrittura del parser su SCORING_BOOLEAN_QUERY_REWRITE.

Questo cambiamento sembra essere diventato necessario da quando Lucene v2.9 è arrivato.

Spero che questo aiuti,

+0

Errr ... come? Da quello che ho visto nei documenti, ho bisogno di un MultiTermQuery per pasticciarlo, ma ho solo una query. Devo testare per il tipo di MultiTermQuery e il cast? –

+0

Ho provato alla cieca: query = parser.Parse (searchText); if (query.GetType() == typeof (Lucene.Net.Search.PrefixQuery)) { (query Lucene.Net.Search.PrefixQuery)) .SetRewriteMethod (Lucene.Net.Search.PrefixQuery.SCORING_BOOLEAN_QUERY_REWRITE); } e ha peggiorato le cose. –

+2

In realtà intendevo impostare lo stile di riscrittura sul parser. Ad esempio, utilizzando il metodo SetMultiTermRewriteMethod dell'oggetto parser. HTH –