[ 
https://issues.apache.org/jira/browse/LUCENE-3440?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13120049#comment-13120049
 ] 

sebastian L. commented on LUCENE-3440:
--------------------------------------

Another patch for 4.0. This one makes FieldFragList "plugable".  

This patch contains:
- Introduction of interface FieldFragList
- Introduction of abstract class BaseFieldFragList which contains SubInfo and 
FieldFragInfo (I renamed WeightedFragInfo)
- Introduction of class SimpleFieldFragList (default)
- Introduction of class WeightedFieldFragList
- Introduction of abstract class BaseFragListBuilder
- Introduction of class SimpleFragListBuilder (default)
- Introduction of class WeightedFragListBuilder 

The weighting-formula now depends on the implementation of 
FieldFragList.add(int startOffset, int endOffset, List<FieldPhraseInfo> 
phraseInfoList):

{code:java}
  /* (non-Javadoc)
   * @see org.apache.lucene.search.vectorhighlight.FieldFragList#getFragInfos()
   */ 
  @Override
  public void add( int startOffset, int endOffset, List<FieldPhraseInfo> 
phraseInfoList ) {
    float score = 0;
    List<SubInfo> subInfos = new ArrayList<SubInfo>();
    for( FieldPhraseInfo phraseInfo : phraseInfoList ){
      subInfos.add( new SubInfo( phraseInfo.getText(), 
phraseInfo.getTermsOffset(), phraseInfo.getSeqnum() ) );
      score += phraseInfo.getBoost();
    }
    getFragInfos().add( new FieldFragInfo( startOffset, endOffset, subInfos, 
score ) );
  }
{code}

The choosen FieldFragList depends on FragListBuilder.createFieldFragList( 
FieldPhraseList fieldPhraseList, int fragCharSize ):

{code:java}
  /* (non-Javadoc)
   * @see 
org.apache.lucene.search.vectorhighlight.FragListBuilder#createFieldFragList(FieldPhraseList
 fieldPhraseList, int fragCharSize)
   */ 
  @Override
  public FieldFragList createFieldFragList( FieldPhraseList fieldPhraseList, 
int fragCharSize ){
    return createFieldFragList( fieldPhraseList, new SimpleFieldFragList( 
fragCharSize ), fragCharSize );
  } 
{code}

Of course, Solr-config could look like this:

{code:xml}
<highlighter>
 <fragListBuilder name="simple" 
class="org.apache.solr.highlight.SimpleFragListBuilder"/>
 <fragListBuilder name="weighted" 
class="org.apache.solr.highlight.WeightedFragListBuilder" default="true"/>
 <fragmentsBuilder name="ordered" 
class="org.apache.solr.highlight.ScoreOrderFragmentsBuilder" default="true"/>
</highlighter>
{code}

I think, this is the best possible approach, because it maintains 
backwards-compatibility, but do also some refactoring which 
would/could/should/can make it easier to plug-in different approaches in 
future. 

But, after a few weeks of banging my head against the wall I have to admit: I 
have no idea. ;) 

                
> FastVectorHighlighter: IDF-weighted terms for ordered fragments 
> ----------------------------------------------------------------
>
>                 Key: LUCENE-3440
>                 URL: https://issues.apache.org/jira/browse/LUCENE-3440
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: modules/highlighter
>    Affects Versions: 3.5, 4.0
>            Reporter: sebastian L.
>            Priority: Minor
>              Labels: FastVectorHighlighter
>             Fix For: 3.5, 4.0
>
>         Attachments: LUCENE-3.5-SNAPSHOT-3440-6-ProofOfConcept.java, 
> LUCENE-3.5-SNAPSHOT-3440-6.patch, LUCENE-4.0-SNAPSHOT-3440-6.patch, 
> WeightOrderFragmentsBuilder_table01.html, 
> WeightOrderFragmentsBuilder_table02.html
>
>
> The FastVectorHighlighter uses for every term found in a fragment an equal 
> weight, which causes a higher ranking for fragments with a high number of 
> words or, in the worst case, a high number of very common words than 
> fragments that contains *all* of the terms used in the original query. 
> This patch provides ordered fragments with IDF-weighted terms: 
> total weight = total weight + IDF for unique term per fragment * boost of 
> query; 
> The ranking-formula should be the same, or at least similar, to that one used 
> in org.apache.lucene.search.highlight.QueryTermScorer.
> The patch is simple, but it works for us. 
> Some ideas:
> - A better approach would be moving the whole fragments-scoring into a 
> separate class.
> - Switch scoring via parameter 
> - Exact phrases should be given a even better score, regardless if a 
> phrase-query was executed or not
> - edismax/dismax-parameters pf, ps and pf^boost should be observed and 
> corresponding fragments should be ranked higher 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to