Как да накарам Lucene (.NET) да маркира правилно със заместващи знаци?

Използвам Lucene.NET API директно в моето ASP.NET/C# уеб приложение. Когато търся със заместващ знак, като "fuc*", маркерът не подчертава нищо, но когато търся цялата дума, като "fuchsia", той подчертава добре. Lucene има ли способността да подчертава, използвайки същата логика, с която използва за съвпадение?

Различни може би уместни кодови фрагменти по-долу:

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

и след това при всяко попадение...

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

И аз използвам QueryParser и StandardAnalyzer.


person Scott Stafford    schedule 14.05.2010    source източник


Отговори (1)


ще трябва да сте сигурни, че сте задали метода за пренаписване на анализатора на SCORING_BOOLEAN_QUERY_REWRITE.

Тази промяна изглежда е станала необходима, откакто се появи Lucene v2.9.

Надявам се това да помогне,

person Adrian Conlon    schedule 14.05.2010
comment
Errr... как? От това, което видях в документите, имам нужда от MultiTermQuery, за да се забърквам с това, но имам само Query. Трябва ли да тествам за typeof MultiTermQuery и да извърша? - person Scott Stafford; 18.05.2010
comment
Опитах сляпо: 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); } и това влоши нещата. - person Scott Stafford; 18.05.2010
comment
Всъщност исках да задам стила на пренаписване на анализатора. т.е. използвайки метода SetMultiTermRewriteMethod на обекта на анализатора. HTH - person Adrian Conlon; 18.05.2010