diff options
author | Lester Solbakken <lesters@oath.com> | 2019-02-01 12:49:40 +0100 |
---|---|---|
committer | Lester Solbakken <lesters@oath.com> | 2019-02-01 12:49:40 +0100 |
commit | 95ed396233a77eab4eae19f0376264f481a97238 (patch) | |
tree | 09defd31ce5848deca92813c181fbe8f274d882e /searchsummary/src | |
parent | 809e726cb714fd357eec4de4553e0b5d331423ba (diff) |
Docsum and bolding: don't return empty strings for empty fields
Diffstat (limited to 'searchsummary/src')
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp | 43 | ||||
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h | 3 |
2 files changed, 27 insertions, 19 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp index b9177ac8782..5888621acf9 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp @@ -356,7 +356,20 @@ JuniperTeaserDFW::Init( } vespalib::string -DynamicTeaserDFW::makeDynamicTeaser(uint32_t docid, GeneralResult *gres, GetDocsumsState *state) +DynamicTeaserDFW::getJuniperInput(GeneralResult *gres, GetDocsumsState *state) { + int idx = gres->GetClass()->GetIndexFromEnumValue(_inputFieldEnumValue); + ResEntry *entry = gres->GetEntry(idx); + if (entry != nullptr) { + const char *buf; + uint32_t buflen; + entry->_resolve_field(&buf, &buflen, &state->_docSumFieldSpace); + return vespalib::string(buf, buflen); + } + return vespalib::string(); +} + +vespalib::string +DynamicTeaserDFW::makeDynamicTeaser(uint32_t docid, vespalib::string input, GetDocsumsState *state) { if (state->_dynteaser._query == nullptr) { JuniperQueryAdapter iq(state->_kwExtractor, @@ -384,29 +397,20 @@ DynamicTeaserDFW::makeDynamicTeaser(uint32_t docid, GeneralResult *gres, GetDocs state->_dynteaser._config = _juniperConfig.get(); state->_dynteaser._result = nullptr; - int idx = gres->GetClass()->GetIndexFromEnumValue(_inputFieldEnumValue); - ResEntry *entry = gres->GetEntry(idx); - - if (entry != nullptr && state->_dynteaser._query != nullptr) { - - // obtain Juniper input - const char *buf; - uint32_t buflen; - - entry->_resolve_field(&buf, &buflen, &state->_docSumFieldSpace); + if (state->_dynteaser._query != nullptr) { if (LOG_WOULD_LOG(spam)) { std::ostringstream hexDump; - hexDump << vespalib::HexDump(buf, buflen); + hexDump << vespalib::HexDump(input.c_str(), input.length()); LOG(spam, "makeDynamicTeaser: docid=%d, input='%s', hexdump:\n%s", - docid, std::string(buf, buflen).c_str(), hexDump.str().c_str()); + docid, input.c_str(), hexDump.str().c_str()); } - uint32_t langid = static_cast<uint32_t>(-1); + auto langid = static_cast<uint32_t>(-1); state->_dynteaser._result = juniper::Analyse(_juniperConfig.get(), state->_dynteaser._query, - buf, buflen, docid, _inputFieldEnumValue, langid); + input.c_str(), input.length(), docid, _inputFieldEnumValue, langid); } } @@ -435,9 +439,12 @@ void DynamicTeaserDFW::insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state, ResType, vespalib::slime::Inserter &target) { - vespalib::string teaser = makeDynamicTeaser(docid, gres, state); - vespalib::Memory value(teaser.c_str(), teaser.size()); - target.insertString(value); + vespalib::string input = getJuniperInput(gres, state); + if (input.length() > 0) { + vespalib::string teaser = makeDynamicTeaser(docid, input, state); + vespalib::Memory value(teaser.c_str(), teaser.size()); + target.insertString(value); + } } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h index f6218d563ed..5285016ec33 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h @@ -49,8 +49,9 @@ class DynamicTeaserDFW : public JuniperTeaserDFW public: DynamicTeaserDFW(juniper::Juniper * juniper) : JuniperTeaserDFW(juniper) { } + vespalib::string getJuniperInput(GeneralResult *gres, GetDocsumsState *state); vespalib::string makeDynamicTeaser(uint32_t docid, - GeneralResult *gres, + vespalib::string input, GetDocsumsState *state); void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state, |