Moving the highlighted snippets to the main response is a bad thing for some 
applications.  E.g. if you do any sorting or searching on the returned fields, 
you need to use the original values.   The same is true if any of the values 
are used as a key into some other system or table lookup.   Specifically, the 
insertion of markup into the text changes values that affect sorting and 
matching.

Thus the wisdom of the current design that returns highlighting results 
separately.

Of course, it is very simple to merge the highlighting results into the 
returned documents.   The highlighting results have been thoughtfully arranged 
as a lookup table using the unique ID field as the key.   In SolrJ, this is a 
Map<>.   Thus, you can loop over the result documents, lookup the highlight 
results for that document and overwrite the original value with the highlighted 
value.   Be sure to set your snippet size bigger than the largest value you 
expect!

Anyway, this type of thing is better handled by the application than Solr, per 
se.

static int nDocs( QueryResponse response ) {
        int nReturned = 0;
        if ( null != response && null != response.getResults() ) {
                nReturned = response.getResults().size();
        }
        return nReturned;
}
        
static boolean hasHighlight( QueryResponse response ) {
        boolean hasHL = false;
        if ( null != response && null != response.getHighlighting() ) {
                hasHL = response.getHighlighting().size() > 0;
        }
        return hasHL;
}
        
protected void mergeHighlightResults( QueryResponse response, String 
uniqueIdField )
{
        if ( nDocs(response) > 0 && hasHighlight(response) )
        {
                for ( SolrDocument result : response.getResults() )
                {
                        Map<String, List<String>> hlDoc
                                 = response.getHighlighting().get( 
result.getFirstValue(uniqueIdField) );
                        if ( null != hlDoc && hlDoc.size() > 0 ) {
                                for ( String fieldName : hlDoc.keySet() ) 
                                {
                                        List<String> hlValues = hlDoc.get( 
fieldName );
                                        // This is the only tricky bit: this 
logic may not work all that well for multi-valued fields.
                                        // You cannot reliably match the 
altered values to an original value.  So, if any HL values
                                        // are returned, just replace all 
values with HL values.
                                        // This will not work 100% of the time.
                                                
                                        int ix = 0;
                                        for ( String hlVal : hlValues ) {
                                                if ( 0 == ix++ ) {
                                                        result.setField( 
fieldName, hlVal );
                                                }
                                                else {
                                                        result.addField( 
fieldName, hlVal );
                                                }
                                        }
                                }
                        }
                }
        }
}

-----Original Message-----
From: Ahmet Arslan [mailto:iori...@yahoo.com.INVALID] 
Sent: Thursday, June 11, 2015 6:43 AM
To: solr-user@lucene.apache.org
Subject: Re: Show all fields in Solr highlighting output

Hi Edwin,

I think Highlighting Behaviour of those types shifts over time. May be we 
should do the reverse. 
Move snippets to main response: https://issues.apache.org/jira/browse/SOLR-3479

Ahmet



On Thursday, June 11, 2015 11:23 AM, Zheng Lin Edwin Yeo <edwinye...@gmail.com> 
wrote:
Hi Ahmet,

I've tried that, but it's still not able to show.

Those fields are actually of type=float, type=date and type=int.

By default those field type are not able to be highlighted?

Regards,
Edwin




On 11 June 2015 at 15:03, Ahmet Arslan <iori...@yahoo.com.invalid> wrote:

> Hi Edwin,
>
> hl.alternateField is probably what you are looking for.
>
> ahmet
>
>
>
>
> On Thursday, June 11, 2015 5:38 AM, Zheng Lin Edwin Yeo < 
> edwinye...@gmail.com> wrote:
> Hi,
>
> Is it possible to list all the fields in the highlighting portion in 
> the output?
> Currently,even when I <str name="hl.fl">*</str>, it only shows fields 
> where highlighting is possible, and fields which highlighting is not 
> possible is not shown.
>
> I would like to have the output where all the fields, regardless if 
> highlighting is possible or not, to be shown together.
>
>
> Regards,
> Edwin
>

*************************************************************************
This e-mail may contain confidential or privileged information.
If you are not the intended recipient, please notify the sender immediately and 
then delete it.

TIAA-CREF
*************************************************************************

Reply via email to