You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by "Daniel J. Williams" <da...@agentlogic.com> on 2006/09/01 01:12:25 UTC

highlight using a MemoryIndex

I was able to get the following code to work using a RAMDirectory, but after reading the description of the MemoryIndex, I wanted to try to use it instead for speed reasons. I removed the RAMDir code, and replaced the references with the MemoryIndex, and all seems to go well till I start stepping through the hits. 1 hit is found, but the String returned from the "hits.doc(i).get(FIELD_NAME);" call is always null. Any ideas where I went wrong?

 

Thank you,

Dan Williams

 

    public String findAndWrap( String queryString, String value)

    {

//        System.out.println( "Methods output = [" + Methods.containsBoolean(queryString, value) + "]");

        String returnString = null;

 

 

        try {

            // store the string to search

            MemoryIndex index = new MemoryIndex();

            index.addField(FIELD_NAME, value, new StandardAnalyzer());

 

            /* RAMDir method

            RAMDirectory ramDir = new RAMDirectory();

            IndexWriter writer = new IndexWriter(ramDir, new StandardAnalyzer(), true);

            addDoc(writer, value);

 

            writer.optimize();

            writer.close();

            IndexReader reader = IndexReader.open(ramDir);

            */

 

            // setup the queryString

            QueryParser parser=new QueryParser(FIELD_NAME, new StandardAnalyzer());

            Query unReWrittenQuery = parser.parse(queryString);

            System.out.println("UnRewritten Query: [" + unReWrittenQuery.toString(FIELD_NAME) + "]");

 

            System.out.println("score = " + index.search(unReWrittenQuery));

 

            IndexSearcher searcher = index.createSearcher();

/*          IndexSearcher searcher = new IndexSearcher(ramDir);*/

            System.out.println("Searcher = " + searcher.toString());

                                    IndexReader reader = searcher.getIndexReader();

 

            Query query = unReWrittenQuery.rewrite(reader);

            System.out.println("Searching for: " + query.toString(FIELD_NAME));

            Hits hits = searcher.search(query);

 

            System.out.println("Number of Hits = [" + hits.length() + "]");

 

            if( hits.length() > 0)

            {

                Highlighter highlighter =new Highlighter(this,new QueryScorer(query));

                highlighter.setTextFragmenter(new NullFragmenter());

                for (int i = 0; i < hits.length(); i++)

                {

                    String text = hits.doc(i).get(FIELD_NAME);

                    int maxNumFragmentsRequired = 2;

                    String fragmentSeparator = "...";

                    StandardAnalyzer analyzer2 = new StandardAnalyzer();

                    TokenStream tokenStream=analyzer2.tokenStream(FIELD_NAME,new StringReader(text));

 

                    returnString =

                        highlighter.getBestFragments(

                                tokenStream,

                                text,

                                maxNumFragmentsRequired,

                                fragmentSeparator);

                }

            }

            else

            {

                System.out.println("No Matches found to highlight.");

                returnString = value;

            }

        } catch (ParseException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

 

        return returnString;

    }

 

    public static void main(String[] args) {

 

        StringBuffer contents = new StringBuffer();

 

        contents.append("bob\n");

        contents.append("\n");

        contents.append("bobberson\n");

        contents.append("\n");

        contents.append("test\n");

        contents.append("\n");

        contents.append("\n");

        contents.append("\n");

        contents.append("\n");

        contents.append("dated this is also a test sentence\n");

        contents.append("\n");

        contents.append("Dated:7/24/2006\n");

        contents.append("\n");

        contents.append("#Dated: 7/24/2006\n");

        contents.append("\n");

        contents.append("asdf asdfas dfasdfDateda sdfasdfa sdfasd fasdf: 7/24/2006\n");

 

 

        String queryString1 = "(+test +Dated*)";

 

        String queryString2 = "sdfasd and !ted";

        String queryString3 = "test";

 

        modularHtmlHighlighter hl = new modularHtmlHighlighter();

 

        System.out.println("string 1");

        System.out.println( hl.findAndWrap(queryString1, contents.toString()) );

        System.out.println("string 2");

        System.out.println( hl.findAndWrap(queryString2, contents.toString()) );

        System.out.println("string 3");

        System.out.println( hl.findAndWrap(queryString3, contents.toString()) );

 

    }

 

 


CONFIDENTIALITY NOTICE:  This e-mail (including attachments) may contain information that is proprietary or confidential. If you are not the intended recipient or a person responsible for its delivery to the intended recipient, do not copy or distribute it. Please permanently delete the e-mail and any attachments, and notify us immediately at (703) 387-2400 x23.