diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-09-05 13:07:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-05 13:07:13 +0200 |
commit | 04d8ae826ae56d1d89119fd4fd5ce7f0ab35ec7c (patch) | |
tree | 8554848b7eeb107322ffd3a00683d4666ea1d002 /searchcore | |
parent | 9263243d4036760d67605b4f1497704cb8c4bf02 (diff) |
Revert "Revert "Use commands from summary config to setup document field rewriters.""
Diffstat (limited to 'searchcore')
4 files changed, 57 insertions, 8 deletions
diff --git a/searchcore/src/tests/proton/docsummary/docsummary.cpp b/searchcore/src/tests/proton/docsummary/docsummary.cpp index 93e8f3d248b..b034b77086c 100644 --- a/searchcore/src/tests/proton/docsummary/docsummary.cpp +++ b/searchcore/src/tests/proton/docsummary/docsummary.cpp @@ -35,6 +35,7 @@ #include <vespa/searchlib/tensor/tensor_attribute.h> #include <vespa/searchlib/transactionlog/nosyncproxy.h> #include <vespa/searchlib/transactionlog/translogserver.h> +#include <vespa/searchsummary/docsummary/i_docsum_field_writer_factory.h> #include <vespa/searchsummary/docsummary/i_docsum_store_document.h> #include <vespa/searchsummary/docsummary/summaryfieldconverter.h> #include <vespa/vespalib/data/simple_buffer.h> @@ -77,6 +78,19 @@ using namespace vespalib::slime; namespace proton { +class MockDocsumFieldWriterFactory : public search::docsummary::IDocsumFieldWriterFactory +{ +public: + std::unique_ptr<DocsumFieldWriter> create_docsum_field_writer(const vespalib::string& fieldName, const vespalib::string& overrideName, const vespalib::string& argument, bool& rc) override { + (void) fieldName; + (void) overrideName; + (void) argument; + (void) rc; + return {}; + } + +}; + class DirMaker { public: @@ -1121,7 +1135,8 @@ Fixture::Fixture() std::string cfgId("summary"); _summaryCfg = ConfigGetter<vespa::config::search::SummaryConfig>::getConfig( cfgId, ::config::FileSpec(TEST_PATH("summary.cfg"))); - _resultCfg.ReadConfig(*_summaryCfg, cfgId.c_str()); + auto docsum_field_writer_factory = std::make_unique<MockDocsumFieldWriterFactory>(); + _resultCfg.ReadConfig(*_summaryCfg, cfgId.c_str(), *docsum_field_writer_factory); } Fixture::~Fixture() = default; diff --git a/searchcore/src/tests/proton/docsummary/summary.cfg b/searchcore/src/tests/proton/docsummary/summary.cfg index cceb15c8fd2..33641351c02 100644 --- a/searchcore/src/tests/proton/docsummary/summary.cfg +++ b/searchcore/src/tests/proton/docsummary/summary.cfg @@ -61,31 +61,54 @@ classes[2].id 2 classes[2].fields[2] classes[2].fields[0].name "aa" classes[2].fields[0].type "integer" +classes[2].fields[0].command "copy" +classes[2].fields[0].source "ab" classes[2].fields[1].name "ab" classes[2].fields[1].type "integer" +classes[2].fields[1].command "empty" classes[3].name "class3" classes[3].id 3 classes[3].fields[10] classes[3].fields[0].name "ba" classes[3].fields[0].type "integer" +classes[3].fields[0].command "attribute" +classes[3].fields[0].source "ba" classes[3].fields[1].name "bb" classes[3].fields[1].type "float" +classes[3].fields[1].command "attribute" +classes[3].fields[1].source "bb" classes[3].fields[2].name "bc" classes[3].fields[2].type "longstring" +classes[3].fields[2].command "attribute" +classes[3].fields[2].source "bc" classes[3].fields[3].name "bd" classes[3].fields[3].type "jsonstring" +classes[3].fields[3].command "attribute" +classes[3].fields[3].source "bd" classes[3].fields[4].name "be" classes[3].fields[4].type "jsonstring" +classes[3].fields[4].command "attribute" +classes[3].fields[4].source "be" classes[3].fields[5].name "bf" classes[3].fields[5].type "jsonstring" +classes[3].fields[5].command "attribute" +classes[3].fields[5].source "bf" classes[3].fields[6].name "bg" classes[3].fields[6].type "jsonstring" +classes[3].fields[6].command "attribute" +classes[3].fields[6].source "bg" classes[3].fields[7].name "bh" classes[3].fields[7].type "jsonstring" +classes[3].fields[7].command "attribute" +classes[3].fields[7].source "bh" classes[3].fields[8].name "bi" classes[3].fields[8].type "jsonstring" +classes[3].fields[8].command "attribute" +classes[3].fields[8].source "bi" classes[3].fields[9].name "bj" classes[3].fields[9].type "tensor" +classes[3].fields[9].command "attribute" +classes[3].fields[9].source "bj" classes[4].name "class4" classes[4].id 4 classes[4].fields[1] @@ -98,18 +121,28 @@ classes[5].fields[0].name "sp2" classes[5].fields[0].type "int64" classes[5].fields[1].name "sp2x" classes[5].fields[1].type "xmlstring" +classes[5].fields[1].command "positions" +classes[5].fields[1].source "sp2" classes[5].fields[2].name "ap2" classes[5].fields[2].type "jsonstring" classes[5].fields[3].name "ap2x" classes[5].fields[3].type "xmlstring" +classes[5].fields[3].command "positions" +classes[5].fields[3].source "ap2" classes[5].fields[4].name "wp2" classes[5].fields[4].type "jsonstring" classes[5].fields[5].name "wp2x" classes[5].fields[5].type "xmlstring" +classes[5].fields[5].command "positions" +classes[5].fields[5].source "wp2" classes[6].name "class6" classes[6].id 6 classes[6].fields[6] classes[6].fields[0].name "ba" classes[6].fields[0].type "integer" +classes[6].fields[0].command "attribute" +classes[6].fields[0].source "ba" classes[6].fields[1].name "bb" classes[6].fields[1].type "float" +classes[6].fields[1].command "attribute" +classes[6].fields[1].source "bb" diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp index 942dac63955..9a4ec121d3b 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp @@ -71,13 +71,13 @@ makeSlimeParams(size_t chunkSize) { vespalib::Slime::UP DocsumContext::createSlimeReply() { - _docsumWriter.InitState(_attrMgr, &_docsumState); + IDocsumWriter::ResolveClassInfo rci = _docsumWriter.resolveClassInfo(_docsumState._args.getResultClassName()); + _docsumWriter.InitState(_attrMgr, _docsumState, rci); const size_t estimatedChunkSize(std::min(0x200000ul, _docsumState._docsumbuf.size()*0x400ul)); vespalib::Slime::UP response(std::make_unique<vespalib::Slime>(makeSlimeParams(estimatedChunkSize))); Cursor & root = response->setObject(); Cursor & array = root.setArray(DOCSUMS); const Symbol docsumSym = response->insert(DOCSUM); - IDocsumWriter::ResolveClassInfo rci = _docsumWriter.resolveClassInfo(_docsumState._args.getResultClassName()); _docsumState._omit_summary_features = (rci.outputClass != nullptr) ? rci.outputClass->omit_summary_features() : true; uint32_t num_ok(0); for (uint32_t docId : _docsumState._docsumbuf) { diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.cpp b/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.cpp index 3e3a3529e46..6a0133e913d 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.cpp +++ b/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.cpp @@ -9,7 +9,7 @@ #include <vespa/juniper/rpinterface.h> #include <vespa/searchcore/proton/flushengine/shrink_lid_space_flush_target.h> #include <vespa/vespalib/util/lambdatask.h> -#include <vespa/searchsummary/docsummary/docsumconfig.h> +#include <vespa/searchsummary/docsummary/docsum_field_writer_factory.h> #include <vespa/searchsummary/docsummary/keywordextractor.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/fastlib/text/normwordfolder.h> @@ -92,8 +92,10 @@ SummarySetup(const vespalib::string & baseDir, const SummaryConfig & summaryCfg, _docStore(std::move(docStore)), _repo(std::move(repo)) { + _juniperConfig = std::make_unique<juniper::Juniper>(&_juniperProps, _wordFolder.get()); auto resultConfig = std::make_unique<ResultConfig>(); - if (!resultConfig->ReadConfig(summaryCfg, make_string("SummaryManager(%s)", baseDir.c_str()).c_str())) { + auto docsum_field_writer_factory = std::make_unique<DocsumFieldWriterFactory>(summaryCfg.usev8geopositions, *this); + if (!resultConfig->ReadConfig(summaryCfg, make_string("SummaryManager(%s)", baseDir.c_str()).c_str(), *docsum_field_writer_factory)) { std::ostringstream oss; ::config::OstreamConfigWriter writer(oss); writer.write(summaryCfg); @@ -101,11 +103,10 @@ SummarySetup(const vespalib::string & baseDir, const SummaryConfig & summaryCfg, (make_string("Could not initialize summary result config for directory '%s' based on summary config '%s'", baseDir.c_str(), oss.str().c_str())); } + docsum_field_writer_factory.reset(); - _juniperConfig = std::make_unique<juniper::Juniper>(&_juniperProps, _wordFolder.get()); _docsumWriter = std::make_unique<DynamicDocsumWriter>(std::move(resultConfig), std::unique_ptr<KeywordExtractor>()); - DynamicDocsumConfig dynCfg(*this, _docsumWriter.get()); - dynCfg.configure(summarymapCfg); + (void) summarymapCfg; } IDocsumStore::UP |