summaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2018-10-23 08:00:38 +0000
committergjoranv <gv@oath.com>2019-01-21 15:09:24 +0100
commitbaa0464324dbbffb9f3c0f2948ba33784d773018 (patch)
treea56bc307bcc07dc55f92d53c34f3d63a32698d8f /searchsummary
parent1c466523888fa4c3b4aa73fc65c244dfe83bf0d9 (diff)
skip fields which are empty or only have the default value
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp29
1 files changed, 21 insertions, 8 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp
index 8ff45202a40..6679c88e166 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp
@@ -78,6 +78,9 @@ DynamicDocsumWriter::resolveInputClass(ResolveClassInfo &rci, uint32_t id) const
}
}
+constexpr uint32_t default_32bits_int = (uint32_t)std::numeric_limits<int32_t>::min();
+constexpr uint64_t default_64bits_int = (uint64_t)std::numeric_limits<int64_t>::min();
+
static void convertEntry(GetDocsumsState *state,
const ResConfigEntry *resCfg,
const ResEntry *entry,
@@ -93,30 +96,40 @@ static void convertEntry(GetDocsumsState *state,
case RES_INT:
case RES_SHORT:
case RES_BYTE:
- inserter.insertLong(entry->_intval);
+ if (entry->_intval != default_32bits_int) {
+ inserter.insertLong(entry->_intval);
+ }
break;
case RES_BOOL:
inserter.insertBool(entry->_intval != 0);
break;
case RES_FLOAT:
case RES_DOUBLE:
- inserter.insertDouble(entry->_doubleval);
+ if (! std::isnan(entry->_doubleval)) {
+ inserter.insertDouble(entry->_doubleval);
+ }
break;
case RES_INT64:
- inserter.insertLong(entry->_int64val);
+ if (entry->_int64val != default_64bits_int) {
+ inserter.insertLong(entry->_int64val);
+ }
break;
case RES_STRING:
case RES_LONG_STRING:
case RES_FEATUREDATA:
case RES_XMLSTRING:
entry->_resolve_field(&ptr, &len, &state->_docSumFieldSpace);
- inserter.insertString(Memory(ptr, len));
+ if (len != 0) {
+ inserter.insertString(Memory(ptr, len));
+ }
break;
case RES_DATA:
case RES_TENSOR:
case RES_LONG_DATA:
entry->_resolve_field(&ptr, &len, &state->_docSumFieldSpace);
- inserter.insertData(Memory(ptr, len));
+ if (len != 0) {
+ inserter.insertData(Memory(ptr, len));
+ }
break;
case RES_JSONSTRING:
entry->_resolve_field(&ptr, &len, &state->_docSumFieldSpace);
@@ -165,10 +178,10 @@ DynamicDocsumWriter::insertDocsum(const ResolveClassInfo & rci, uint32_t docid,
const Memory field_name(outCfg->_bindname.data(), outCfg->_bindname.size());
ObjectInserter inserter(docsum, field_name);
if (writer != nullptr) {
- //TODO: Need to add test for writer->isDefaultValue
- writer->insertField(docid, &gres, state, outCfg->_type, inserter);
+ if (! writer->isDefaultValue(docid, state)) {
+ writer->insertField(docid, &gres, state, outCfg->_type, inserter);
+ }
} else {
- //TODO: Need to add similar test as writer->isDefaultValue
if (rci.inputClass == rci.outputClass) {
convertEntry(state, outCfg, gres.GetEntry(i), inserter, slime);
} else {