Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
1.5
-
None
Description
I have noticed when using q.alt even if hl=true highlights are not returned.
When using distributed search, q.alt and hl, HighlightComponent.java
finishStage expects the highlighting NamedList of each shard (if hl=true)
but it will never be returned. It will end up with a NullPointerExcepion.
I have temporally solved it checking that highlight NamedList is always
returned for each shard. If it's not the case, highlights are not added to
the response:
@Override
public void finishStage(ResponseBuilder rb) {
boolean hasHighlighting = true ;
if (rb.doHighlights && rb.stage == ResponseBuilder.STAGE_GET_FIELDS) {
Map.Entry<String, Object>[] arr = new
NamedList.NamedListEntry[rb.resultIds.size()];
// TODO: make a generic routine to do automatic merging of id keyed
data
for (ShardRequest sreq : rb.finished) {
if ((sreq.purpose & ShardRequest.PURPOSE_GET_HIGHLIGHTS) == 0)
continue;
for (ShardResponse srsp : sreq.responses) {
NamedList hl =
(NamedList)srsp.getSolrResponse().getResponse().get("highlighting");
if(hl != null) {
for (int i=0; i<hl.size(); i++)
} else
{ hasHighlighting = false; } }
}
// remove nulls in case not all docs were able to be retrieved
if(hasHighlighting)
}
}