public void DoStandardHighlights(Analyzer analyzer, IndexSearcher searcher, TopDocs hits, Query query, IFormatter formatter, bool expandMT) { IFragmenter frag = new SimpleFragmenter(20); for (int i = 0; i < hits.TotalHits; i++) { String text = searcher.Doc(hits.ScoreDocs[i].Doc).Get(HighlighterTest.FIELD_NAME); int maxNumFragmentsRequired = 2; String fragmentSeparator = "..."; IScorer scorer = null; TokenStream tokenStream = analyzer.TokenStream(HighlighterTest.FIELD_NAME, new StringReader(text)); if (Mode == QUERY) { scorer = new QueryScorer(query); } else if (Mode == QUERY_TERM) { scorer = new QueryTermScorer(query); } var highlighter = new Highlighter(formatter, scorer) {TextFragmenter = frag}; String result = highlighter.GetBestFragments(tokenStream, text, maxNumFragmentsRequired, fragmentSeparator); Console.WriteLine("\t" + result); } }
private void SearchIndex() { String q = "t_text1:random"; QueryParser parser = new QueryParser(TEST_VERSION, "t_text1", a); Query query = parser.Parse(q); IndexSearcher searcher = new IndexSearcher(dir, true); // This scorer can return negative idf -> null fragment IScorer scorer = new QueryTermScorer(query, searcher.IndexReader, "t_text1"); // This scorer doesn't use idf (patch version) //Scorer scorer = new QueryTermScorer( query, "t_text1" ); Highlighter h = new Highlighter(scorer); TopDocs hits = searcher.Search(query, null, 10); for (int i = 0; i < hits.TotalHits; i++) { Document doc = searcher.Doc(hits.ScoreDocs[i].Doc); String result = h.GetBestFragment(a, "t_text1", doc.Get("t_text1")); Console.WriteLine("result:" + result); Assert.AreEqual(result, "more <B>random</B> words for second field"); } searcher.Close(); }
public Highlighter GetHighlighter(Query query, String fieldName, TokenStream stream, IFormatter formatter, bool expanMultiTerm) { IScorer scorer = null; if (Mode == QUERY) { scorer = new QueryScorer(query, fieldName); if (!expanMultiTerm) { ((QueryScorer) scorer).IsExpandMultiTermQuery = false; } } else if (Mode == QUERY_TERM) { scorer = new QueryTermScorer(query); } else { throw new SystemException("Unknown highlight mode"); } return new Highlighter(formatter, scorer); }
public void TestFieldSpecificHighlighting() { var helper = new TestHighlightRunner(); helper.TestAction = () => { var docMainText = "fred is one of the people"; var parser = new QueryParser(TEST_VERSION, FIELD_NAME, analyzer); var query = parser.Parse("fred category:people"); // highlighting respects fieldnames used in query IScorer fieldSpecificScorer = null; if (helper.Mode == TestHighlightRunner.QUERY) { fieldSpecificScorer = new QueryScorer(query, FIELD_NAME); } else if (helper.Mode == TestHighlightRunner.QUERY_TERM) { fieldSpecificScorer = new QueryTermScorer(query, "contents"); } var fieldSpecificHighlighter = new Highlighter(new SimpleHTMLFormatter(), fieldSpecificScorer) {TextFragmenter = new NullFragmenter()}; String result = fieldSpecificHighlighter.GetBestFragment(analyzer, FIELD_NAME, docMainText); Assert.AreEqual(result, "<B>fred</B> is one of the people", "Should match"); // highlighting does not respect fieldnames used in query IScorer fieldInSpecificScorer = null; if (helper.Mode == TestHighlightRunner.QUERY) { fieldInSpecificScorer = new QueryScorer(query, null); } else if (helper.Mode == TestHighlightRunner.QUERY_TERM) { fieldInSpecificScorer = new QueryTermScorer(query); } var fieldInSpecificHighlighter = new Highlighter(new SimpleHTMLFormatter(), fieldInSpecificScorer) {TextFragmenter = new NullFragmenter()}; result = fieldInSpecificHighlighter.GetBestFragment(analyzer, FIELD_NAME, docMainText); Assert.AreEqual(result, "<B>fred</B> is one of the <B>people</B>", "Should match"); reader.Close(); }; helper.Start(); }