2010-05-14 10 views
6

Ich verwende die Lucene.NET API direkt in meiner ASP.NET/C# Webanwendung. Wenn ich mit einem Platzhalter wie "fuc *" suche, hebt der Highlighter nichts hervor, aber wenn ich nach dem ganzen Wort suche, wie "fuchsia", hebt es hervor. Kann Lucene die gleiche Logik verwenden, mit der es übereinstimmt?Wie bekomme ich Lucene (.NET), um mit Wildcards richtig hervorzuheben?

Verschiedener vielleicht relevanter Code-Schnipsel unter:

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

und dann auf jedem Treffer ...

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

und ich bin den QueryParser und die StandardAnalyzer verwenden.

Antwort

4

müssen Sie sicherstellen, dass Sie die Parser-Neuschreibmethode auf SCORING_BOOLEAN_QUERY_REWRITE setzen.

Diese Änderung scheint seit Lucene v2.9 notwendig geworden zu sein.

Hoffe, das hilft,

+0

Errr ... wie? Von dem, was ich in den Dokumenten gesehen habe, brauche ich eine MultiTermQuery, um damit zu verfahren, aber ich habe nur eine Abfrage. Soll ich auf typeof MultiTermQuery testen und aufspielen? –

+0

Ich habe blind versucht: query = parser.Parse (searchText); if (query.GetType() == typeof (Lucene.Net.Search.PrefixQuery)) { ((Lucene.Net.Search.PrefixQuery) query) .SetRewriteMethod (Lucene.Net.Search.PrefixQuery.SCORING_BOOLEAN_QUERY_REWRITE); } und es machte die Dinge noch schlimmer. –

+2

Eigentlich wollte ich den Rewrite-Stil auf den Parser setzen. d.h. Verwenden der SetMultiTermRewriteMethod-Methode des Parser-Objekts. HTH –

Verwandte Themen