You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ko...@apache.org on 2010/08/28 01:42:07 UTC
svn commit: r990301 - in /lucene/dev/trunk: lucene/contrib/CHANGES.txt
lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java
solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
Author: koji
Date: Fri Aug 27 23:42:07 2010
New Revision: 990301
URL: http://svn.apache.org/viewvc?rev=990301&view=rev
Log:
LUCENE-2626: FastVectorHighlighter: enable FragListBuilder and FragmentsBuilder to be set per-field override
Modified:
lucene/dev/trunk/lucene/contrib/CHANGES.txt
lucene/dev/trunk/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java
lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
Modified: lucene/dev/trunk/lucene/contrib/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/CHANGES.txt?rev=990301&r1=990300&r2=990301&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/contrib/CHANGES.txt Fri Aug 27 23:42:07 2010
@@ -133,6 +133,9 @@ API Changes
* LUCENE-2603: Add setMultiValuedSeparator(char) method to set an arbitrary
char that is used when concatenating multiValued data. Default is a space
(' '). It is applied on ANALYZED field only. (Koji Sekiguchi)
+
+ * LUCENE-2626: FastVectorHighlighter: enable FragListBuilder and FragmentsBuilder
+ to be set per-field override. (Koji Sekiguchi)
New features
Modified: lucene/dev/trunk/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java?rev=990301&r1=990300&r2=990301&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java (original)
+++ lucene/dev/trunk/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FastVectorHighlighter.java Fri Aug 27 23:42:07 2010
@@ -92,7 +92,8 @@ public class FastVectorHighlighter {
*/
public final String getBestFragment( final FieldQuery fieldQuery, IndexReader reader, int docId,
String fieldName, int fragCharSize ) throws IOException {
- FieldFragList fieldFragList = getFieldFragList( fieldQuery, reader, docId, fieldName, fragCharSize );
+ FieldFragList fieldFragList =
+ getFieldFragList( fragListBuilder, fieldQuery, reader, docId, fieldName, fragCharSize );
return fragmentsBuilder.createFragment( reader, docId, fieldName, fieldFragList );
}
@@ -111,7 +112,8 @@ public class FastVectorHighlighter {
*/
public final String[] getBestFragments( final FieldQuery fieldQuery, IndexReader reader, int docId,
String fieldName, int fragCharSize, int maxNumFragments ) throws IOException {
- FieldFragList fieldFragList = getFieldFragList( fieldQuery, reader, docId, fieldName, fragCharSize );
+ FieldFragList fieldFragList =
+ getFieldFragList( fragListBuilder, fieldQuery, reader, docId, fieldName, fragCharSize );
return fragmentsBuilder.createFragments( reader, docId, fieldName, fieldFragList, maxNumFragments );
}
@@ -123,6 +125,8 @@ public class FastVectorHighlighter {
* @param docId document id to be highlighted
* @param fieldName field of the document to be highlighted
* @param fragCharSize the length (number of chars) of a fragment
+ * @param fragListBuilder {@link FragListBuilder} object
+ * @param fragmentsBuilder {@link FragmentsBuilder} object
* @param preTags pre-tags to be used to highlight terms
* @param postTags post-tags to be used to highlight terms
* @param encoder an encoder that generates encoded text
@@ -130,9 +134,10 @@ public class FastVectorHighlighter {
* @throws IOException
*/
public final String getBestFragment( final FieldQuery fieldQuery, IndexReader reader, int docId,
- String fieldName, int fragCharSize, String[] preTags, String[] postTags,
- Encoder encoder ) throws IOException {
- FieldFragList fieldFragList = getFieldFragList( fieldQuery, reader, docId, fieldName, fragCharSize );
+ String fieldName, int fragCharSize,
+ FragListBuilder fragListBuilder, FragmentsBuilder fragmentsBuilder,
+ String[] preTags, String[] postTags, Encoder encoder ) throws IOException {
+ FieldFragList fieldFragList = getFieldFragList( fragListBuilder, fieldQuery, reader, docId, fieldName, fragCharSize );
return fragmentsBuilder.createFragment( reader, docId, fieldName, fieldFragList, preTags, postTags, encoder );
}
@@ -145,6 +150,8 @@ public class FastVectorHighlighter {
* @param fieldName field of the document to be highlighted
* @param fragCharSize the length (number of chars) of a fragment
* @param maxNumFragments maximum number of fragments
+ * @param fragListBuilder {@link FragListBuilder} object
+ * @param fragmentsBuilder {@link FragmentsBuilder} object
* @param preTags pre-tags to be used to highlight terms
* @param postTags post-tags to be used to highlight terms
* @param encoder an encoder that generates encoded text
@@ -153,14 +160,17 @@ public class FastVectorHighlighter {
* @throws IOException
*/
public final String[] getBestFragments( final FieldQuery fieldQuery, IndexReader reader, int docId,
- String fieldName, int fragCharSize, int maxNumFragments, String[] preTags, String[] postTags,
- Encoder encoder ) throws IOException {
- FieldFragList fieldFragList = getFieldFragList( fieldQuery, reader, docId, fieldName, fragCharSize );
+ String fieldName, int fragCharSize, int maxNumFragments,
+ FragListBuilder fragListBuilder, FragmentsBuilder fragmentsBuilder,
+ String[] preTags, String[] postTags, Encoder encoder ) throws IOException {
+ FieldFragList fieldFragList =
+ getFieldFragList( fragListBuilder, fieldQuery, reader, docId, fieldName, fragCharSize );
return fragmentsBuilder.createFragments( reader, docId, fieldName, fieldFragList, maxNumFragments,
preTags, postTags, encoder );
}
- private FieldFragList getFieldFragList( final FieldQuery fieldQuery, IndexReader reader, int docId,
+ private FieldFragList getFieldFragList( FragListBuilder fragListBuilder,
+ final FieldQuery fieldQuery, IndexReader reader, int docId,
String fieldName, int fragCharSize ) throws IOException {
FieldTermStack fieldTermStack = new FieldTermStack( reader, docId, fieldName, fieldQuery );
FieldPhraseList fieldPhraseList = new FieldPhraseList( fieldTermStack, fieldQuery );
Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java?rev=990301&r1=990300&r2=990301&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java Fri Aug 27 23:42:07 2010
@@ -301,8 +301,8 @@ public class DefaultSolrHighlighter exte
return frag.getFragmenter( fieldName, params );
}
- protected FragListBuilder getFragListBuilder( SolrParams params ){
- String flb = params.get( HighlightParams.FRAG_LIST_BUILDER );
+ protected FragListBuilder getFragListBuilder( String fieldName, SolrParams params ){
+ String flb = params.getFieldParam( fieldName, HighlightParams.FRAG_LIST_BUILDER );
SolrFragListBuilder solrFlb = fragListBuilders.get( flb );
if( solrFlb == null ){
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Unknown fragListBuilder: " + flb );
@@ -310,12 +310,12 @@ public class DefaultSolrHighlighter exte
return solrFlb.getFragListBuilder( params );
}
- protected FragmentsBuilder getFragmentsBuilder( SolrParams params ){
- return getSolrFragmentsBuilder( params ).getFragmentsBuilder( params );
+ protected FragmentsBuilder getFragmentsBuilder( String fieldName, SolrParams params ){
+ return getSolrFragmentsBuilder( fieldName, params ).getFragmentsBuilder( params );
}
- private SolrFragmentsBuilder getSolrFragmentsBuilder( SolrParams params ){
- String fb = params.get( HighlightParams.FRAGMENTS_BUILDER );
+ private SolrFragmentsBuilder getSolrFragmentsBuilder( String fieldName, SolrParams params ){
+ String fb = params.getFieldParam( fieldName, HighlightParams.FRAGMENTS_BUILDER );
SolrFragmentsBuilder solrFb = fragmentsBuilders.get( fb );
if( solrFb == null ){
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Unknown fragmentsBuilder: " + fb );
@@ -361,11 +361,8 @@ public class DefaultSolrHighlighter exte
// FVH cannot process hl.usePhraseHighlighter parameter per-field basis
params.getBool( HighlightParams.USE_PHRASE_HIGHLIGHTER, true ),
// FVH cannot process hl.requireFieldMatch parameter per-field basis
- params.getBool( HighlightParams.FIELD_MATCH, false ),
- getFragListBuilder( params ),
- getFragmentsBuilder( params ) );
+ params.getBool( HighlightParams.FIELD_MATCH, false ) );
FieldQuery fieldQuery = fvh.getFieldQuery( query );
- SolrFragmentsBuilder solrFb = getSolrFragmentsBuilder( params );
// Highlight each document
DocIterator iterator = docs.iterator();
@@ -376,7 +373,7 @@ public class DefaultSolrHighlighter exte
for (String fieldName : fieldNames) {
fieldName = fieldName.trim();
if( useFastVectorHighlighter( params, schema, fieldName ) )
- doHighlightingByFastVectorHighlighter( fvh, fieldQuery, solrFb, req, docSummaries, docId, doc, fieldName );
+ doHighlightingByFastVectorHighlighter( fvh, fieldQuery, req, docSummaries, docId, doc, fieldName );
else
doHighlightingByHighlighter( query, req, docSummaries, docId, doc, fieldName );
}
@@ -504,12 +501,15 @@ public class DefaultSolrHighlighter exte
}
private void doHighlightingByFastVectorHighlighter( FastVectorHighlighter highlighter, FieldQuery fieldQuery,
- SolrFragmentsBuilder solrFb, SolrQueryRequest req, NamedList docSummaries, int docId, Document doc,
+ SolrQueryRequest req, NamedList docSummaries, int docId, Document doc,
String fieldName ) throws IOException {
SolrParams params = req.getParams();
+ SolrFragmentsBuilder solrFb = getSolrFragmentsBuilder( fieldName, params );
String[] snippets = highlighter.getBestFragments( fieldQuery, req.getSearcher().getReader(), docId, fieldName,
params.getFieldInt( fieldName, HighlightParams.FRAGSIZE, 100 ),
params.getFieldInt( fieldName, HighlightParams.SNIPPETS, 1 ),
+ getFragListBuilder( fieldName, params ),
+ getFragmentsBuilder( fieldName, params ),
solrFb.getPreTags( params, fieldName ),
solrFb.getPostTags( params, fieldName ),
getEncoder( fieldName, params ) );