diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-06-29 11:35:57 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-06-29 11:35:57 +0200 |
commit | 99f502a0daad8fc69f1bcd317a58d25756e0c351 (patch) | |
tree | 3a9872fbcdb5fcf4f24995ecb9d5d2b54d5b9cd0 /searchsummary | |
parent | c4dc902aa6e301b6f56d526ea9cccc0fc5be7a00 (diff) |
Handle struct field in CopyDFW.
Diffstat (limited to 'searchsummary')
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp index 47d94a716f7..28e20729eee 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp @@ -6,6 +6,7 @@ #include <vespa/searchlib/common/documentlocations.h> #include <vespa/searchlib/common/location.h> #include <vespa/searchlib/parsequery/stackdumpiterator.h> +#include <vespa/vespalib/data/slime/slime.h> #include <vespa/log/log.h> LOG_SETUP(".searchlib.docsummary.docsumfieldwriter"); @@ -121,7 +122,23 @@ CopyDFW::insertField(uint32_t /*docid*/, GeneralResult *gres, GetDocsumsState *, target.insertLong(valint64); break; } - case RES_JSONSTRING: + case RES_JSONSTRING: { + uint32_t len; + const char *spt; + // resolve field + entry->_resolve_field(&spt, &len); + if (len != 0) { + // note: 'JSONSTRING' really means 'structured data' + vespalib::Slime input_field_as_slime; + size_t d = vespalib::slime::BinaryFormat::decode(vespalib::Memory(spt, len), input_field_as_slime); + if (d != len) { + LOG(warning, "could not decode %u bytes: %zu bytes decoded", len, d); + } + if (d != 0) { + inject(input_field_as_slime.get(), target); + } + } + break; } case RES_FEATUREDATA: case RES_LONG_STRING: case RES_STRING: { |