Lucene HTMLFormatter пропускает последний символ
У меня есть этот простой поисковый код Lucene (изменено с http://www.lucenetutorial.com/lucene-in-5-minutes.html)
class Program
{
static void Main(string[] args)
{
StandardAnalyzer analyzer = new StandardAnalyzer();
Directory index = new RAMDirectory();
IndexWriter w = new IndexWriter(index, analyzer, true,
IndexWriter.MaxFieldLength.UNLIMITED);
addDoc(w, "Table 1 <table> content </table>");
addDoc(w, "Table 2");
addDoc(w, "<table> content </table>");
addDoc(w, "The Art of Computer Science");
w.Close();
String querystr = "table";
Query q = new QueryParser("title", analyzer).Parse(querystr);
Lucene.Net.Search.IndexSearcher searcher = new
Lucene.Net.Search.IndexSearcher(index);
Hits hitsFound = searcher.Search(q);
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("*", "*");
Highlighter highlighter = null;
highlighter = new Highlighter(formatter, new QueryScorer(searcher.Rewrite(q)));
for (int i = 0; i < hitsFound.Length(); i++)
{
Console.WriteLine(highlighter.GetBestFragment(analyzer, "title", hitsFound.Doc(i).Get("title")));
// Console.WriteLine(hitsFound.Doc(i).Get("title"));
}
Console.ReadKey();
}
private static void addDoc(IndexWriter w, String value)
{
Document doc = new Document();
doc.Add(new Field("title", value, Field.Store.YES, Field.Index.ANALYZED));
w.AddDocument(doc);
}
}
Выделенные результаты всегда, кажется, пропускают закрывающее ">" моего последнего табличного тега. Какие-либо предложения?
2 ответа
Решаемые. Очевидно моя версия Highlighter.Net была архаичной. Обновление до 2.3.2.1. Решил проблему
Изначально маркер Lucene предназначен для работы с простым текстом. Он будет работать некорректно, если вы попытаетесь выделить HTML или любой текст разметки.
Недавно я столкнулся с той же проблемой и нашел решение в HTMLStripReader от Solr, которое пропускает содержимое в тегах. Решение обрисовано в общих чертах в моем блоге по следующему URL.
http://sigabrt.blogspot.com/2010/04/highlighting-query-in-entire-html.html
Я мог бы опубликовать код здесь, но мое решение применимо для Lucene Java. Для.Net вы должны найти эквивалент HTMLStripReader.