diff options
12 files changed, 36 insertions, 273 deletions
diff --git a/searchcore/src/tests/proton/docsummary/docsummary.cpp b/searchcore/src/tests/proton/docsummary/docsummary.cpp index 3e41873f083..bffc9f9b772 100644 --- a/searchcore/src/tests/proton/docsummary/docsummary.cpp +++ b/searchcore/src/tests/proton/docsummary/docsummary.cpp @@ -377,7 +377,7 @@ public: GeneralResultPtr Test::getResult(DocumentStoreAdapter & dsa, uint32_t docId) { - DocsumStoreValue docsum = dsa.getMappedDocsum(docId, true); + DocsumStoreValue docsum = dsa.getMappedDocsum(docId); ASSERT_TRUE(docsum.pt() != NULL); GeneralResultPtr retval(new GeneralResult(dsa.getResultClass(), 0, 0, 0)); @@ -573,7 +573,7 @@ Test::requireThatAdapterHandlesMultipleDocuments() EXPECT_EQUAL(2000u, res->GetEntry("a")->_intval); } { // doc 2 - DocsumStoreValue docsum = dsa.getMappedDocsum(2, true); + DocsumStoreValue docsum = dsa.getMappedDocsum(2); EXPECT_TRUE(docsum.pt() == NULL); } { // doc 0 (again) @@ -663,10 +663,10 @@ Test::requireThatDocsumRequestIsProcessed() EXPECT_EQUAL(3u, rep->docsums.size()); EXPECT_EQUAL(2u, rep->docsums[0].docid); EXPECT_EQUAL(gid2, rep->docsums[0].gid); - EXPECT_TRUE(assertSlime("{a:20}", *rep, 0, true)); + EXPECT_TRUE(assertSlime("{a:20}", *rep, 0, false)); EXPECT_EQUAL(4u, rep->docsums[1].docid); EXPECT_EQUAL(gid4, rep->docsums[1].gid); - EXPECT_TRUE(assertSlime("{a:40}", *rep, 1, true)); + EXPECT_TRUE(assertSlime("{a:40}", *rep, 1, false)); EXPECT_EQUAL(search::endDocId, rep->docsums[2].docid); EXPECT_EQUAL(gid9, rep->docsums[2].gid); EXPECT_TRUE(rep->docsums[2].data.get() == NULL); @@ -698,7 +698,7 @@ Test::requireThatRewritersAreUsed() req.hits.push_back(DocsumRequest::Hit(gid1)); DocsumReply::UP rep = dc._ddb->getDocsums(req); EXPECT_EQUAL(1u, rep->docsums.size()); - EXPECT_TRUE(assertSlime("{aa:20}", *rep, 0, true)); + EXPECT_TRUE(assertSlime("{aa:20}", *rep, 0, false)); } @@ -828,7 +828,7 @@ Test::requireThatAttributesAreUsed() "bf:[]," "bg:[]," "bh:[]," - "bi:[]}", *rep, 1, true)); + "bi:[]}", *rep, 1, false)); TEST_DO(assertTensor(Tensor::UP(), "bj", *rep, 1, rclass)); proton::IAttributeManager::SP attributeManager = @@ -1173,7 +1173,8 @@ Test::requireThatPositionsAreUsed() "<position x=\"1008\" y=\"1009\" latlong=\"N0.001009;E0.001008\" />'" ",wp2:[{item:1048370,weight:43},{item:1048382,weight:44}]" ",wp2x:'<position x=\"1012\" y=\"1013\" latlong=\"N0.001013;E0.001012\" />" - "<position x=\"1014\" y=\"1015\" latlong=\"N0.001015;E0.001014\" />'}", *rep, 0, true)); + "<position x=\"1014\" y=\"1015\" latlong=\"N0.001015;E0.001014\" />'}", + *rep, 0, false)); } diff --git a/searchcore/src/tests/proton/docsummary/summaryfieldconverter_test.cpp b/searchcore/src/tests/proton/docsummary/summaryfieldconverter_test.cpp index 113113af195..5159f5b6061 100644 --- a/searchcore/src/tests/proton/docsummary/summaryfieldconverter_test.cpp +++ b/searchcore/src/tests/proton/docsummary/summaryfieldconverter_test.cpp @@ -432,7 +432,7 @@ T Test::cvtSummaryAs(bool markup, const FieldValue::UP &fv) { ASSERT_TRUE(fv.get() != NULL); - FieldValue::UP r = SFC::convertSummaryField(markup, *fv, false); + FieldValue::UP r = SFC::convertSummaryField(markup, *fv); return cvtValueAs<T>(r); } @@ -487,8 +487,7 @@ void Test::requireThatSummaryIsAnUnmodifiedString() { setSummaryField("string"); Document summary = makeDocument(); checkString("Foo Bar Baz", SFC::convertSummaryField(false, - *summary.getValue("string"), - false).get()); + *summary.getValue("string")).get()); } void Test::requireThatAttributeIsAnUnmodifiedString() { @@ -502,28 +501,18 @@ void Test::requireThatArrayIsFlattenedInSummaryField() { setSummaryField("string_array"); Document summary = makeDocument(); FieldBlock expect("[\"\\\"foO\\\"\",\"ba\\\\R\"]"); - checkString(expect.json, - SFC::convertSummaryField(false, - *summary.getValue("string_array"), - false).get()); checkData(expect.binary, SFC::convertSummaryField(false, - *summary.getValue("string_array"), - true).get()); + *summary.getValue("string_array")).get()); } void Test::requireThatWeightedSetIsFlattenedInSummaryField() { setSummaryField("string_wset"); Document summary = makeDocument(); FieldBlock expect("[{\"item\":\"\\\"foo\\\"\",\"weight\":2},{\"item\":\"ba\\\\r\",\"weight\":4}]"); - checkString(expect.json, - SFC::convertSummaryField(false, - *summary.getValue("string_wset"), - false).get()); checkData(expect.binary, SFC::convertSummaryField(false, - *summary.getValue("string_wset"), - true).get()); + *summary.getValue("string_wset")).get()); } void Test::requireThatPositionsAreTransformedInSummary() { @@ -672,7 +661,7 @@ Test::requireThatPredicateIsPrinted() doc.setValue("predicate", PredicateFieldValue(std::move(input))); checkString("'foo' in ['bar']\n", - SFC::convertSummaryField(false, *doc.getValue("predicate"), false).get()); + SFC::convertSummaryField(false, *doc.getValue("predicate")).get()); } @@ -695,21 +684,17 @@ Test::requireThatTensorIsNotConverted() TEST_CALL(checkTensor(createTensor({ {{{"x", "4"}, {"y", "5"}}, 7} }, {"x", "y"}), SFC::convertSummaryField(false, - *doc.getValue("tensor"), - true).get())); + *doc.getValue("tensor")).get())); doc.setValue("tensor", TensorFieldValue()); TEST_CALL(checkTensor(Tensor::UP(), SFC::convertSummaryField(false, - *doc.getValue("tensor"), - true).get())); + *doc.getValue("tensor")).get())); } void Test::checkStringForAllConversions(const string& expected, const FieldValue* fv) { ASSERT_TRUE(fv != nullptr); - for (bool use_slime : {true, false}) { - checkString(expected, SFC::convertSummaryField(false, *fv, use_slime).get()); - } + checkString(expected, SFC::convertSummaryField(false, *fv).get()); } const ReferenceDataType& Test::getAsRefType(const string& name) const { @@ -751,7 +736,7 @@ void Test::requireThatReferenceInCompositeTypeEmitsSlimeData() { FieldBlock expect(R"({"inner_ref":"id:ns:target_dummy_document::foo"})"); checkData(expect.binary, - SFC::convertSummaryField(false, *doc.getValue("nested"), true).get()); + SFC::convertSummaryField(false, *doc.getValue("nested")).get()); } } // namespace diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/documentstoreadapter.cpp b/searchcore/src/vespa/searchcore/proton/docsummary/documentstoreadapter.cpp index fc5f1288f00..3b4a72eb4fd 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/documentstoreadapter.cpp +++ b/searchcore/src/vespa/searchcore/proton/docsummary/documentstoreadapter.cpp @@ -104,7 +104,7 @@ DocumentStoreAdapter::writeField(const FieldValue &value, ResType type) void -DocumentStoreAdapter::convertFromSearchDoc(Document &doc, uint32_t docId, bool useSlimeInsideFields) +DocumentStoreAdapter::convertFromSearchDoc(Document &doc, uint32_t docId) { for (size_t i = 0; i < _resultClass->GetNumEntries(); ++i) { const ResConfigEntry * entry = _resultClass->GetEntry(i); @@ -141,7 +141,7 @@ DocumentStoreAdapter::convertFromSearchDoc(Document &doc, uint32_t docId, bool u fieldName.c_str(), fieldValue->toString().c_str(), entry->_type); FieldValue::UP convertedFieldValue = - SummaryFieldConverter::convertSummaryField(markup, *fieldValue, useSlimeInsideFields); + SummaryFieldConverter::convertSummaryField(markup, *fieldValue); if (convertedFieldValue.get() != NULL) { if (!writeField(*convertedFieldValue, entry->_type)) { LOG(warning, @@ -181,7 +181,7 @@ DocumentStoreAdapter(const search::IDocumentStore & docStore, } DocsumStoreValue -DocumentStoreAdapter::getMappedDocsum(uint32_t docId, bool useSlimeInsideFields) +DocumentStoreAdapter::getMappedDocsum(uint32_t docId) { if (!_resultPacker.Init(getSummaryClassId())) { LOG(warning, @@ -201,7 +201,7 @@ DocumentStoreAdapter::getMappedDocsum(uint32_t docId, bool useSlimeInsideFields) "getMappedDocSum(%u): document={\n%s\n}", docId, document->toString(true).c_str()); - convertFromSearchDoc(*document, docId, useSlimeInsideFields); + convertFromSearchDoc(*document, docId); const char * buf; uint32_t buflen; if (!_resultPacker.GetDocsumBlob(&buf, &buflen)) { diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/documentstoreadapter.h b/searchcore/src/vespa/searchcore/proton/docsummary/documentstoreadapter.h index d58117ace96..26c6b7683fc 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/documentstoreadapter.h +++ b/searchcore/src/vespa/searchcore/proton/docsummary/documentstoreadapter.h @@ -32,8 +32,7 @@ private: search::docsummary::ResType type); void - convertFromSearchDoc(document::Document &doc, uint32_t docId, - bool useSlimeInsideFields); + convertFromSearchDoc(document::Document &doc, uint32_t docId); public: DocumentStoreAdapter(const search::IDocumentStore &docStore, @@ -48,7 +47,7 @@ public: } uint32_t getNumDocs() const override { return _docStore.nextId(); } - search::docsummary::DocsumStoreValue getMappedDocsum(uint32_t docId, bool useSlimeInsideFields) override; + search::docsummary::DocsumStoreValue getMappedDocsum(uint32_t docId) override; uint32_t getSummaryClassId() const override { return _resultClass->GetClassID(); } }; diff --git a/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp b/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp index f5f37468b79..91420dad7ac 100644 --- a/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp +++ b/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp @@ -70,8 +70,7 @@ struct DocsumFixture : IDocsumStore, GetDocsumsStateCallback { ::decode(Memory(buf.GetDrainPos(), buf.GetUsedLen()), slime), 0u); } uint32_t getNumDocs() const override { return 2; } - DocsumStoreValue getMappedDocsum(uint32_t docid, bool useSlimeInsideFields) override { - EXPECT_EQUAL(true, useSlimeInsideFields); + DocsumStoreValue getMappedDocsum(uint32_t docid) override { EXPECT_EQUAL(1u, docid); EXPECT_TRUE(packer->Init(0)); EXPECT_TRUE(packer->AddInteger(4)); diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstore.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumstore.h index ae611cd71a1..fe4b7c990ca 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstore.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstore.h @@ -39,9 +39,8 @@ public: * * @return docsum blob location and size * @param docid local document id - * @param useSlimeInsideFields use serialized slime instead of json for structured fields **/ - virtual DocsumStoreValue getMappedDocsum(uint32_t docid, bool useSlimeInsideFields) = 0; + virtual DocsumStoreValue getMappedDocsum(uint32_t docid) = 0; /** * Will return default input class used. diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp index c4e70e452cf..e0d0a9fab42 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp @@ -121,9 +121,7 @@ static void convertEntry(GetDocsumsState *state, case RES_JSONSTRING: entry->_resolve_field(&ptr, &len, &state->_docSumFieldSpace); if (len != 0) { - // note: 'JSONSTRING' really means 'structured data', - // and in this code path we depend on calling the - // getMappedDocsum api with flag useSlimeInsideFields=true + // note: 'JSONSTRING' really means 'structured data' size_t d = BinaryFormat::decode_into(Memory(ptr, len), slime, inserter); if (d != len) { LOG(warning, "could not decode %u bytes: %zu bytes decoded", len, d); @@ -157,7 +155,7 @@ DynamicDocsumWriter::insertDocsum(const ResolveClassInfo & rci, } } else { // look up docsum entry - DocsumStoreValue value = docinfos->getMappedDocsum(docid, true); + DocsumStoreValue value = docinfos->getMappedDocsum(docid); // re-pack docsum blob GeneralResult gres(rci.inputClass, 0, docid, 0); if (! gres.inplaceUnpack(value)) { diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp index 5945770d084..6f545dfe88e 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp @@ -36,12 +36,10 @@ #include <vespa/vespalib/geo/zcurve.h> #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vespalib/stllike/string.h> -#include <vespa/vespalib/util/jsonwriter.h> #include <vespa/vespalib/util/stringfmt.h> #include <vespa/vespalib/data/slime/slime.h> #include <vespa/vespalib/data/slime/convenience.h> #include <vespa/vespalib/data/slime/binary_format.h> -#include <vespa/vespalib/data/slime/json_format.h> #include <vespa/eval/tensor/serialization/slime_binary_format.h> #include <vespa/eval/tensor/serialization/typed_binary_format.h> #include <vespa/vespalib/objects/nbostream.h> @@ -86,7 +84,6 @@ using search::util::URL; using std::make_pair; using std::pair; using std::vector; -using vespalib::JSONWriter; using vespalib::asciistream; using vespalib::geo::ZCurve; using vespalib::make_string; @@ -236,178 +233,6 @@ struct SummaryHandler { }; - -class JsonFiller : public ConstFieldValueVisitor { - JSONWriter &_json; - bool _tokenize; - - virtual void visit(const AnnotationReferenceFieldValue & v ) { - (void)v; - _json.beginObject(); - _json.appendKey("error"); - _json.appendString("cannot convert from annotation reference field"); - _json.endObject(); - } - virtual void visit(const Document & v) { - (void)v; - _json.beginObject(); - _json.appendKey("error"); - _json.appendString("cannot convert from field of type document"); - _json.endObject(); - } - - virtual void visit(const MapFieldValue & v) { - _json.beginArray(); - for (const auto & entry : v) { - _json.beginObject(); - - _json.appendKey("key"); - const FieldValue &key = *(entry.first); - key.accept(*this); - - const FieldValue &val = *(entry.second); - _json.appendKey("value"); - val.accept(*this); - - _json.endObject(); - } - _json.endArray(); - } - - virtual void visit(const ArrayFieldValue &value) { - _json.beginArray(); - if (value.size() > 0) { - for (const FieldValue &fv : value) { - fv.accept(*this); - } - } - _json.endArray(); - } - - virtual void visit(const StringFieldValue &value) { - if (_tokenize) { - asciistream tmp; - SummaryHandler handler(value.getValue(), tmp); - handleIndexingTerms(handler, value); - _json.appendString(tmp.str()); - } else { - _json.appendString(value.getValue()); - } - } - - virtual void visit(const IntFieldValue &value) { - int32_t v = value.getValue(); _json.appendInt64(v); - } - virtual void visit(const LongFieldValue &value) { - int64_t v = value.getValue(); _json.appendInt64(v); - } - virtual void visit(const ShortFieldValue &value) { - int16_t v = value.getValue(); _json.appendInt64(v); - } - virtual void visit(const ByteFieldValue &value) { - int8_t v = value.getAsByte(); _json.appendInt64(v); - } - virtual void visit(const DoubleFieldValue &value) { - double v = value.getValue(); _json.appendDouble(v); - } - virtual void visit(const FloatFieldValue &value) { - float v = value.getValue(); _json.appendFloat(v); - } - - virtual void - visit(const PredicateFieldValue &value) - { - _json.appendJSON(value.toString()); - } - - virtual void - visit(const RawFieldValue &value) - { - // Use base64 coding to represent raw values in json strings. - std::pair<const char *, size_t> buf = value.getAsRaw(); - vespalib::string rawVal(buf.first, buf.first + buf.second); - _json.appendString(vespalib::Base64::encode(rawVal)); - } - - virtual void visit(const StructFieldValue &value) { - // stringref type_name = value.getDataType()->getName(); - if (*value.getDataType() == *SearchDataType::URI) { - FieldValue::UP uriAllValue = value.getValue("all"); - if (uriAllValue.get() != NULL && - uriAllValue->inherits(IDENTIFIABLE_CLASSID(StringFieldValue))) - { - uriAllValue->accept(*this); - return; - } - } - _json.beginObject(); - for (StructFieldValue::const_iterator itr = value.begin(); itr != value.end(); ++itr) { - _json.appendKey(itr.field().getName()); - FieldValue::UP nextValue(value.getValue(itr.field())); - (*nextValue).accept(*this); - } - _json.endObject(); - } - - virtual void visit(const WeightedSetFieldValue &value) { - _json.beginArray(); - if ( value.size() > 0) { - for (const auto & entry : value) { - _json.beginObject(); - _json.appendKey("item"); - entry.first->accept(*this); - _json.appendKey("weight"); - int weight = static_cast<const IntFieldValue &>(*entry.second).getValue(); - _json.appendInt64(weight); - _json.endObject(); - } - } - _json.endArray(); - } - - virtual void visit(const TensorFieldValue &value) override { - const auto &tensor = value.getAsTensorPtr(); - if (tensor) { - auto slime = - vespalib::tensor::SlimeBinaryFormat::serialize(*tensor); - vespalib::SimpleBuffer buf; - vespalib::slime::JsonFormat::encode(*slime, buf, true); - _json.appendJSON(buf.get().make_string()); - } else { - // No tensor value => empty object - _json.beginObject(); - _json.endObject(); - } - } - - void visit(const ReferenceFieldValue& value) override { - _json.appendString(value.hasValidDocumentId() - ? value.getDocumentId().toString() - : string()); - } - -public: - JsonFiller(bool markup, JSONWriter &json) - : _json(json), _tokenize(markup) {} -}; - -class JsonConverter : public FieldValueConverter { - bool _tokenize; -public: - JsonConverter(bool tokenize) - : _tokenize(tokenize) - {} - - FieldValue::UP convert(const FieldValue &input) { - asciistream target; - JSONWriter json(target); - JsonFiller visitor(_tokenize, json); - input.accept(visitor); - return FieldValue::UP(new StringFieldValue(target.str())); - } - -}; - class SummaryFieldValueConverter : protected ConstFieldValueVisitor { asciistream _str; @@ -688,16 +513,10 @@ public: FieldValue::UP SummaryFieldConverter::convertSummaryField(bool markup, - const FieldValue &value, - bool useSlimeInsideFields) + const FieldValue &value) { - if (useSlimeInsideFields) { - SlimeConverter subConv(markup); - return SummaryFieldValueConverter(markup, subConv).convert(value); - } else { - JsonConverter subConv(markup); - return SummaryFieldValueConverter(markup, subConv).convert(value); - } + SlimeConverter subConv(markup); + return SummaryFieldValueConverter(markup, subConv).convert(value); } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.h b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.h index 9d6f54755cc..ebf723f2111 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.h @@ -14,7 +14,7 @@ class SummaryFieldConverter { public: static document::FieldValue::UP - convertSummaryField(bool markup, const document::FieldValue &value, bool useSlimeInsideFields); + convertSummaryField(bool markup, const document::FieldValue &value); }; } // namespace search::docsummary diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h index f2025e8c161..101fd91c5af 100644 --- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h +++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h @@ -25,6 +25,7 @@ #include <vespa/searchlib/attribute/extendableattributes.h> #include <vespa/searchlib/common/sortspec.h> #include <vespa/storage/visiting/visitor.h> +#include <vespa/document/fieldvalue/fieldvalues.h> #include <vespa/documentapi/messagebus/messages/queryresultmessage.h> using namespace search::aggregation; diff --git a/vsm/src/vespa/vsm/vsm/docsumfilter.cpp b/vsm/src/vespa/vsm/vsm/docsumfilter.cpp index eb4e0bf532f..e858c8ca8a6 100644 --- a/vsm/src/vespa/vsm/vsm/docsumfilter.cpp +++ b/vsm/src/vespa/vsm/vsm/docsumfilter.cpp @@ -1,11 +1,9 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "docsumfilter.h" -#include "jsondocsumwriter.h" #include "slimefieldwriter.h" #include <vespa/searchsummary/docsummary/resultclass.h> #include <vespa/searchsummary/docsummary/summaryfieldconverter.h> -#include <vespa/vespalib/util/jsonwriter.h> #include <vespa/document/fieldvalue/literalfieldvalue.h> #include <vespa/document/base/exceptions.h> #include <vespa/log/log.h> @@ -216,7 +214,6 @@ DocsumFilter::DocsumFilter(const DocsumToolsPtr &tools, const IDocSumCache & doc _fields(), _highestFieldNo(0), _packer(tools.get() ? tools->getResultConfig() : NULL), - _jsonWriter(), _flattenWriter(), _snippetModifiers(NULL), _cachedValue(), @@ -316,33 +313,6 @@ DocsumFilter::writeField(const document::FieldValue & fv, const FieldPath & path } } -void -DocsumFilter::writeJSONField(const DocsumFieldSpec & fieldSpec, - const Document & docsum, - ResultPacker & packer) -{ - if (fieldSpec.getCommand() == VsmsummaryConfig::Fieldmap::NONE) { - const DocsumFieldSpec::FieldIdentifier & fieldId = fieldSpec.getOutputField(); - const document::FieldValue * fv = docsum.getField(fieldId.getId()); - if (fv != NULL) { - LOG(debug, "writeJSONField: About to write field '%d' as JSONSTRING: field value = '%s'", - fieldId.getId(), fv->toString().c_str()); - if (!fieldSpec.hasIdentityMapping()) { - _jsonWriter.setInputFields(fieldSpec.getInputFields()); - } - _jsonWriter.write(*fv); - vespalib::string s = _jsonWriter.getResult(); - packer.AddLongString(s.c_str(), s.size()); - _jsonWriter.clear(); - } else { - LOG(debug, "writeJSONField: Field value not set for field '%d'", fieldId.getId()); - packer.AddEmpty(); - } - } else { - LOG(debug, "writeJSONField: Cannot handle this command"); - packer.AddEmpty(); - } -} void DocsumFilter::writeSlimeField(const DocsumFieldSpec & fieldSpec, @@ -467,7 +437,7 @@ DocsumFilter::getSummaryClassId() const } DocsumStoreValue -DocsumFilter::getMappedDocsum(uint32_t id, bool useSlimeInsideFields) +DocsumFilter::getMappedDocsum(uint32_t id) { const ResultClass *resClass = _tools->getResultClass(); if (resClass == NULL) { @@ -476,17 +446,12 @@ DocsumFilter::getMappedDocsum(uint32_t id, bool useSlimeInsideFields) const Document & doc = _docsumCache->getDocSum(id); - LOG(spam, "getMappedDocsum %u [useSlimeInsideFields=%s]", id, useSlimeInsideFields ? "true" : "false"); - _packer.Init(resClass->GetClassID()); for (FieldSpecList::iterator it(_fields.begin()), end = _fields.end(); it != end; ++it) { ResType type = it->getResultType(); if (type == RES_JSONSTRING || type == RES_XMLSTRING) { - if (useSlimeInsideFields) { - writeSlimeField(*it, doc, _packer); - } else { - writeJSONField(*it, doc, _packer); - } + // this really means 'structured data' + writeSlimeField(*it, doc, _packer); } else { if (it->getInputFields().size() == 1 && it->getCommand() == VsmsummaryConfig::Fieldmap::NONE) { const DocsumFieldSpec::FieldIdentifier & fieldId = it->getInputFields()[0]; diff --git a/vsm/src/vespa/vsm/vsm/docsumfilter.h b/vsm/src/vespa/vsm/vsm/docsumfilter.h index 370843a3789..d39526a2575 100644 --- a/vsm/src/vespa/vsm/vsm/docsumfilter.h +++ b/vsm/src/vespa/vsm/vsm/docsumfilter.h @@ -9,7 +9,6 @@ #include <vespa/vsm/vsm/docsumfieldspec.h> #include <vespa/vsm/vsm/fieldsearchspec.h> #include <vespa/vsm/vsm/flattendocsumwriter.h> -#include <vespa/vsm/vsm/jsondocsumwriter.h> #include <vespa/vsm/vsm/vsm-adapter.h> #include <vespa/searchsummary/docsummary/resultpacker.h> #include <vespa/searchsummary/docsummary/docsumstore.h> @@ -38,7 +37,6 @@ private: FieldSpecList _fields; // list of summary fields to generate size_t _highestFieldNo; ResultPacker _packer; - JSONDocsumWriter _jsonWriter; FlattenDocsumWriter _flattenWriter; const FieldModifierMap * _snippetModifiers; document::FieldValue::UP _cachedValue; @@ -52,7 +50,6 @@ private: VsmsummaryConfig::Fieldmap::Command command, const Document & docsum, bool & modified); void writeField(const document::FieldValue & fv, const FieldPath & path, ResType type, ResultPacker & packer); - void writeJSONField(const DocsumFieldSpec & fieldSpec, const Document & docsum, ResultPacker & packer); void writeSlimeField(const DocsumFieldSpec & fieldSpec, const Document & docsum, ResultPacker & packer); void writeFlattenField(const DocsumFieldSpec & fieldSpec, const Document & docsum, ResultPacker & packer); void writeEmpty(ResType type, ResultPacker & packer); @@ -86,7 +83,7 @@ public: void setDocSumStore(const IDocSumCache & docsumCache) { _docsumCache = &docsumCache; } // Inherit doc from IDocsumStore - DocsumStoreValue getMappedDocsum(uint32_t id, bool useSlimeInsideFields) override; + DocsumStoreValue getMappedDocsum(uint32_t id) override; uint32_t getNumDocs() const override; uint32_t getSummaryClassId() const override; }; |