2015-10-23 5 views
1

Я использую Lucene.net для поиска документа. Требование - когда поиск выполняется, он должен выделить искомый термин в документе. Я видел примеры, которые возвращают лучшие фрагменты. Но мне нужно выделить основной контент.Lucene.net выделить искомый термин в тексте

 using (StandardAnalyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_30, stopWords)) 
     { 
      QueryParser parser = new QueryParser(Version.LUCENE_30, "Content", standardAnalyzer); 
      parser.AllowLeadingWildcard = true; 
      Query qry = parser.Parse(searchText); 
      Directory indexDir = CreateRAMDirectory(htmlContent); 

      IndexReader reader = IndexReader.Open(indexDir, true); 
      IndexSearcher searcher = new IndexSearcher(reader); 
      searcher.SetDefaultFieldSortScoring(true, true); 

      IFormatter formatter = new SimpleHTMLFormatter("<span style=\"font-weight:bold; background-color:yellow;\">", "</span>"); 
      SimpleFragmenter fragmenter = new SimpleFragmenter(1000); 
      QueryScorer scorer = null; 
      scorer = new QueryScorer(qry); 

      ScoreDoc[] hits = searcher.Search(qry, null, 10000, Sort.RELEVANCE).ScoreDocs; 

      Highlighter highlighter = new Highlighter(formatter, scorer); 
      highlighter.TextFragmenter = fragmenter; 



      foreach (var result in hits) 
      { 
       int docId = result.Doc; 
       float score = result.Score; 
       Document doc = searcher.Doc(docId); 
       Lucene.Net.Analysis.TokenStream stream = standardAnalyzer.TokenStream("Content", new IO.StringReader(searchText)); 
     String highlighterData = highlighter.GetBestFragments(stream, searchText, 1000, ""); 

      } 

     } 

Я новичок в Lucene.Net, как я могу получить весь документ искали термин содержания выделены, а не фрагменты?

ответ

0

Фрагмент определяет, насколько велики куски текста, возвращаемые. Чтобы использовать все содержимое поля, используйте только NullFragmenter, а не SimpleFragmenter.

Fragmenter fragmenter = new NullFragmenter(); 
..... 
highlighter.TextFragmenter = fragmenter; 
+0

Я пробовал это. NullFragmenter fragmenter = new NullFragmenter(); fragmenter.Start (wholeHtmlContent, standardAnalyzer.TokenStream («Содержимое», новый IO.StringReader (searchText))); Строковый текст = highlighter.GetBestFragment (анализатор, «Содержимое», searchText); По-прежнему не получается полный оригинальный документ. Не могли бы вы включить образец кода. Извините за ошибку. – JenonD

+0

спасибо за редактирование, я сделал то же самое. Извините, я все еще не понимаю, как выделить весь документ с искомым текстом? – JenonD

 Смежные вопросы

  • Нет связанных вопросов^_^