}
@Override
public SenseiResult mergeResults(SenseiRequest request, List<SenseiResult> resultList)
{
SenseiResult res = ResultMerger.merge(request, resultList, false);
if (request.isFetchStoredFields()) { // Decompress binary data.
for(SenseiHit hit : res.getSenseiHits()) {
try
{
Document doc = hit.getStoredFields();
byte[] dataBytes = doc.getBinaryValue(SenseiSchema.SRC_DATA_COMPRESSED_FIELD_NAME);
if (dataBytes!=null && dataBytes.length>0){
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] buf = new byte[1024]; // 1k buffer
ByteArrayInputStream bin = new ByteArrayInputStream(dataBytes);
GZIPInputStream gzipStream = new GZIPInputStream(bin);
int len;
while ((len = gzipStream.read(buf)) > 0) {
bout.write(buf, 0, len);
}
bout.flush();
byte[] uncompressed = bout.toByteArray();
hit.setSrcData(new String(uncompressed,"UTF-8"));
}
else {
dataBytes = doc.getBinaryValue(SenseiSchema.SRC_DATA_FIELD_NAME);
if (dataBytes!=null && dataBytes.length>0) {
hit.setSrcData(new String(dataBytes,"UTF-8"));
}
}
doc.removeFields(SenseiSchema.SRC_DATA_COMPRESSED_FIELD_NAME);
doc.removeFields(SenseiSchema.SRC_DATA_FIELD_NAME);
}
catch(Exception e)
{
res.addError(new SenseiError(e.getMessage(),ErrorType.BrokerGatherError));
logger.error(e.getMessage(),e);
}
}
}