lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Miller <markrmil...@gmail.com>
Subject Re: Highlighter that works with phrase and span queries
Date Wed, 27 Jun 2007 13:21:25 GMT
Depending on what these guys are doing, here is another possibility if 
TermOffests and Ronnie's highlighter are not an option.

If you are highlighting whole documents (NullFragmenter) or are not very 
concerned about the fragments you get back, you can change the line in 
the Highlighter at about 255:

                tokenGroup.addToken(token, 
fragmentScorer.getTokenScore(token));

                TO:

                float score = fragmentScorer.getTokenScore(token);
                if(score > 0 ) {
                    tokenGroup.addToken(token, score);
                }

This is not a full solution yet, but more of a hack. Fragmenters won't 
be given the opportunity to start a new Fragment at every token 
position...no problem if you are highlighting the whole document.

Essentially, instead of the the document being rebuilt from from the 
source text using each individual token, it is rebuilt from the 
highlighted tokens and the differences in offsets between them. No so 
fragment happy without some Fragmenter handling changes.

On a collection of  5,000 documents,  300-900 tokens (weighted toward 
300), this gave an improvement of 37-40%. I imagine the gains grow as 
the document grows.

I am looking into making this a more general solution, but it's a great 
quick hack for speed. It will also work with my SpanScorer that 
correctly highlights Spans and PhraseQuerys.

- Mark

Otis Gospodnetic wrote:
> Hi Mark,
>
> I know one large user (meaning: high query/highlight rates) of the current Highlighter
and this user wasn't too happy with its performance.  I don't know the details, other than
it was inefficient.  So now I'm wondering if you've benchmarked your Highlighter against that/current
Highlighter to see not only which one is more accurate, but also which one is faster, and
by how much?
>
> Thanks,
> Otis
>  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
> Simpy -- http://www.simpy.com/  -  Tag  -  Search  -  Share
>
> ----- Original Message ----
> From: Mark Miller <markrmiller@gmail.com>
> To: java-user@lucene.apache.org
> Sent: Wednesday, June 20, 2007 12:39:27 AM
> Subject: Highlighter that works with phrase and span queries
>
> I have been working on extending the Highlighter with a new Scorer that 
> correctly scores phrase and span queries. The highlighter is working 
> great for me, but could really use some more banging on.
>
> If you have a need or an interest in a more accurate Highlighter, please 
> give it a whirl and let me know how it went. Unlike most of the other 
> alternate Lucene Highlighters, this one builds off the original contrib 
> Highlighter so as to retain all of its goodness.
>
> http://myhardshadow.com/qsolreleases/lucene-highlighter-2.2.jar
>
> Example Usage
>
>     IndexSearcher searcher = new IndexSearcher(ramDir);
>     Query query = QueryParser.parse("Kenne*", FIELD_NAME, analyzer);
>     query = query.rewrite(reader); //required to expand search terms
>     Hits hits = searcher.search(query);
>
>     for (int i = 0; i < hits.length(); i++)
>     {
>         String text = hits.doc(i).get(FIELD_NAME);
>         CachingTokenFilter tokenStream = new 
> CachingTokenFilter(analyzer.tokenStream(
>                         FIELD_NAME, new StringReader(text)));
>         Highlighter highlighter = new Highlighter(new SpanScorer(query, 
> FIELD_NAME, tokenStream));
>         tokenStream.reset();
>        
>         // Get 3 best fragments and seperate with a "..."
>         String result = highlighter.getBestFragments(tokenStream, text, 
> 3, "...");
>         System.out.println(result);
>     }
>
> If you make a call to any of the getBestFragments() methods more than 
> once, you must call reset() on the SpanScorer between each call.
>
> Pass null as the FIELD_NAME to ignore fields.
>
> If you want to Highlight the whole document, use a NullFragmenter.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
>
>   

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Mime
View raw message