Как заставить Lucene (.NET) правильно выделять подстановочными знаками? - PullRequest
6 голосов
/ 15 мая 2010

Я использую API Lucene.NET непосредственно в своем веб-приложении 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.

1 Ответ

4 голосов
/ 15 мая 2010

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

Это изменение, по-видимому, стало необходимым с момента появления Lucene v2.9.

Надеюсь, это поможет,

...