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();

        }