Как заставить 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
Эээ ... как? Из того, что я видел в документации, мне нужен MultiTermQuery, чтобы возиться с этим, но у меня есть только запрос. Должен ли я тестировать 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