private void loadTermIntoEntry(HashedStringsFacet.HashedStringEntry hashedEntry) {
switch (output_mode) {
case HASH:
break;
case TERM:
String term = HashedStringFieldData.findTermInDoc(hashedEntry.getTermHash(), hashedEntry.getDocId(),
indexFieldName, fieldIndexAnalyzer, context);
hashedEntry.setTerm(term);
if (logger.isTraceEnabled())
logger.trace("Converted hash entry: term={}, expected_hash={},real_hash={}, count={}, docId={}",
hashedEntry.term(), hashedEntry.getTermHash(), HashedStringFieldType.hashCode(hashedEntry.term()),
hashedEntry.count(), hashedEntry.getDocId());
break;
case SCRIPT:
if (output_script == null)
throw new ElasticSearchIllegalArgumentException(
"Hashed string facet output was set to script, but no script was supplied");
int readerIndex = context.searcher().readerIndex(hashedEntry.getDocId());
IndexReader subReader = context.searcher().subReaders()[readerIndex];
int subDoc = hashedEntry.getDocId() - context.searcher().docStarts()[readerIndex];
output_script.setNextReader(subReader);
output_script.setNextDocId(subDoc);
output_script.setNextVar("_hash",hashedEntry.hashCode());
Object value;
value = output_script.run();
value = output_script.unwrap(value);
hashedEntry.setTerm((String) value);
break;
}
}