Если у меня есть FullText поле с этим содержимымСделать Lucene.net Highlighter шоу Матчи из определенного поля только
In 2014 and 2015 the results were ... [more] ... and Sony are developing ... [more]
И запросов для
+loadTime:[2014 TO 2015] +fullText:sony
Маркера набирает 2014 и 2015 как лучший фрагмент. Как заставить маркер игнорировать совпадения от loadTime часть запроса и использовать совпадения из fullText часть поиска? Я хочу увидеть ... sony ... фрагмент, даже если он оценивается ниже, чем части даты, которые (как только что произошло) совпадают с fullText.
Мой код:
ScoreDoc[] hits = [create search];
IFormatter formatter = new SimpleHTMLFormatter("<b>", "</b>");
QueryScorer scorer = new QueryScorer(query,);
Highlighter highlighter = new Highlighter(formatter, scorer);
for (int i = 0; i < hits.Length; i++)
{
int docId = hits[i].Doc;
float score = hits[i].Score;
Document doc = search.Doc(docId);
string fragments = string.Empty;
if (collectFragments)
{
TokenStream stream = _analyzer.TokenStream("", new StringReader(doc.Get(AppConstants.Fields.FullText)));
fragments = highlighter.GetBestFragments(stream, doc.Get(AppConstants.Fields.FullText), 2, "...");
}
...
}
См. Этот бит, как использовать «+» в синтаксисе запроса lucene: https://lucene.apache.org/core/2_9_4/queryparsersyntax.html#+. См. Также: «Почему не И, ИЛИ, И НЕ?»] (Https://lucidworks.com/blog/why-not-and-or-and-not/), почему синтаксис +/- lucene намного больше выражая фактическое поведение запроса lucene. – femtoRgon