diff options
author | Geir Storli <geirst@yahooinc.com> | 2022-09-26 13:30:50 +0000 |
---|---|---|
committer | Geir Storli <geirst@yahooinc.com> | 2022-09-26 13:30:50 +0000 |
commit | 656ef6ae9f6154117b3e297f9e76fcbd7336b9a2 (patch) | |
tree | 1ac39326a5f0c59e73351af34fcddbccea7926bf /searchlib/src | |
parent | ed48985f772b02dbb19ab9f1324ee65f37659b05 (diff) |
Expose more information in content node search reply trace.
This should make it easier to correlate the backend query blueprints
with the actual query terms.
Diffstat (limited to 'searchlib/src')
7 files changed, 45 insertions, 15 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp index c1a46649d23..3ef675c6b98 100644 --- a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp @@ -116,6 +116,9 @@ private: class AttributeFieldBlueprint : public SimpleLeafBlueprint { private: + // Must take a copy of the query term for visitMembers() + // as only a few ISearchContext implementations exposes the query term. + vespalib::string _query_term; ISearchContext::UP _search_context; enum Type {INT, FLOAT, OTHER}; Type _type; @@ -123,6 +126,7 @@ private: AttributeFieldBlueprint(const FieldSpec &field, const IAttributeVector &attribute, QueryTermSimple::UP term, const attribute::SearchContextParams ¶ms) : SimpleLeafBlueprint(field), + _query_term(term->getTermString()), _search_context(attribute.createSearchContext(std::move(term), params)), _type(OTHER) { @@ -196,6 +200,7 @@ AttributeFieldBlueprint::visitMembers(vespalib::ObjectVisitor &visitor) const { LeafBlueprint::visitMembers(visitor); visit(visitor, "attribute", _search_context->attributeName()); + visit(visitor, "query_term", _query_term); } //----------------------------------------------------------------------------- diff --git a/searchlib/src/vespa/searchlib/diskindex/diskindex.cpp b/searchlib/src/vespa/searchlib/diskindex/diskindex.cpp index aa3859c7fbf..7e8ad4d2f0b 100644 --- a/searchlib/src/vespa/searchlib/diskindex/diskindex.cpp +++ b/searchlib/src/vespa/searchlib/diskindex/diskindex.cpp @@ -388,7 +388,7 @@ public: const DiskIndex::LookupResult & lookupRes = _cache.lookup(termStr, _fieldId); if (lookupRes.valid()) { bool useBitVector = _field.isFilter(); - setResult(std::make_unique<DiskTermBlueprint>(_field, _diskIndex, std::make_unique<DiskIndex::LookupResult>(lookupRes), useBitVector)); + setResult(std::make_unique<DiskTermBlueprint>(_field, _diskIndex, termStr, std::make_unique<DiskIndex::LookupResult>(lookupRes), useBitVector)); } else { setResult(std::make_unique<EmptyBlueprint>(_field)); } diff --git a/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp b/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp index c9d25fb8469..6331f0890f6 100644 --- a/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp +++ b/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp @@ -3,8 +3,9 @@ #include "disktermblueprint.h" #include <vespa/searchlib/common/bitvectoriterator.h> #include <vespa/searchlib/queryeval/booleanmatchiteratorwrapper.h> -#include <vespa/searchlib/queryeval/intermediate_blueprints.h> #include <vespa/searchlib/queryeval/filter_wrapper.h> +#include <vespa/searchlib/queryeval/intermediate_blueprints.h> +#include <vespa/vespalib/objects/visit.h> #include <vespa/vespalib/util/stringfmt.h> #include <vespa/log/log.h> @@ -14,7 +15,7 @@ using search::BitVectorIterator; using search::fef::TermFieldMatchDataArray; using search::index::Schema; using search::queryeval::BooleanMatchIteratorWrapper; -using search::queryeval::FieldSpecBase; +using search::queryeval::FieldSpec; using search::queryeval::FieldSpecBaseList; using search::queryeval::SearchIterator; using search::queryeval::LeafBlueprint; @@ -32,13 +33,15 @@ getName(uint32_t indexId) } -DiskTermBlueprint::DiskTermBlueprint(const FieldSpecBase & field, +DiskTermBlueprint::DiskTermBlueprint(const FieldSpec & field, const DiskIndex & diskIndex, + const vespalib::string& query_term, DiskIndex::LookupResult::UP lookupRes, bool useBitVector) : SimpleLeafBlueprint(field), _field(field), _diskIndex(diskIndex), + _query_term(query_term), _lookupRes(std::move(lookupRes)), _useBitVector(useBitVector), _fetchPostingsDone(false), @@ -94,4 +97,12 @@ DiskTermBlueprint::createFilterSearch(bool strict, FilterConstraint) const return wrapper; } +void +DiskTermBlueprint::visitMembers(vespalib::ObjectVisitor& visitor) const +{ + SimpleLeafBlueprint::visitMembers(visitor); + visit(visitor, "field_name", _field.getName()); + visit(visitor, "query_term", _query_term); +} + } // namespace diff --git a/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h b/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h index 27e9f548cdf..1ed99962bcc 100644 --- a/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h +++ b/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h @@ -13,8 +13,9 @@ namespace search::diskindex { class DiskTermBlueprint : public queryeval::SimpleLeafBlueprint { private: - queryeval::FieldSpecBase _field; + queryeval::FieldSpec _field; const DiskIndex & _diskIndex; + vespalib::string _query_term; DiskIndex::LookupResult::UP _lookupRes; bool _useBitVector; bool _fetchPostingsDone; @@ -30,8 +31,9 @@ public: * @param lookupRes the result after disk dictionary lookup. * @param useBitVector whether or not we should use bit vector. **/ - DiskTermBlueprint(const queryeval::FieldSpecBase & field, + DiskTermBlueprint(const queryeval::FieldSpec & field, const DiskIndex & diskIndex, + const vespalib::string& query_term, DiskIndex::LookupResult::UP lookupRes, bool useBitVector); @@ -42,6 +44,8 @@ public: void fetchPostings(const queryeval::ExecuteInfo &execInfo) override; std::unique_ptr<queryeval::SearchIterator> createFilterSearch(bool strict, FilterConstraint) const override; + + void visitMembers(vespalib::ObjectVisitor& visitor) const override; }; } diff --git a/searchlib/src/vespa/searchlib/memoryindex/field_index.cpp b/searchlib/src/vespa/searchlib/memoryindex/field_index.cpp index ddf58d7b9f1..d731be7fe22 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/field_index.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/field_index.cpp @@ -5,8 +5,8 @@ #include "posting_iterator.h" #include <vespa/searchlib/bitcompression/posocccompression.h> #include <vespa/searchlib/queryeval/booleanmatchiteratorwrapper.h> -#include <vespa/searchlib/queryeval/searchiterator.h> #include <vespa/searchlib/queryeval/filter_wrapper.h> +#include <vespa/searchlib/queryeval/searchiterator.h> #include <vespa/vespalib/btree/btree.hpp> #include <vespa/vespalib/btree/btreeiterator.hpp> #include <vespa/vespalib/btree/btreenode.hpp> @@ -14,10 +14,9 @@ #include <vespa/vespalib/btree/btreenodestore.hpp> #include <vespa/vespalib/btree/btreeroot.hpp> #include <vespa/vespalib/btree/btreestore.hpp> -#include <vespa/vespalib/util/array.hpp> #include <vespa/vespalib/datastore/buffer_type.hpp> -#include <vespa/vespalib/util/exceptions.h> -#include <vespa/vespalib/util/stringfmt.h> +#include <vespa/vespalib/objects/visit.h> +#include <vespa/vespalib/util/array.hpp> #include <vespa/log/log.h> LOG_SETUP(".searchlib.memoryindex.field_index"); @@ -229,23 +228,28 @@ private: using FieldIndexType = FieldIndex<interleaved_features>; using PostingListIteratorType = typename FieldIndexType::PostingList::ConstIterator; GenerationHandler::Guard _guard; + const queryeval::FieldSpec _field; PostingListIteratorType _posting_itr; const FeatureStore& _feature_store; const uint32_t _field_id; + const vespalib::string _query_term; const bool _use_bit_vector; public: MemoryTermBlueprint(GenerationHandler::Guard&& guard, PostingListIteratorType posting_itr, const FeatureStore& feature_store, - const FieldSpecBase& field, + const queryeval::FieldSpec& field, uint32_t field_id, + const vespalib::string& query_term, bool use_bit_vector) : SimpleLeafBlueprint(field), _guard(), + _field(field), _posting_itr(posting_itr), _feature_store(feature_store), _field_id(field_id), + _query_term(query_term), _use_bit_vector(use_bit_vector) { _guard = std::move(guard); @@ -271,6 +275,12 @@ public: wrapper->wrap(make_search_iterator<interleaved_features>(_posting_itr, _feature_store, _field_id, tfmda)); return wrapper; } + + void visitMembers(vespalib::ObjectVisitor& visitor) const override { + SimpleLeafBlueprint::visitMembers(visitor); + visit(visitor, "field_name", _field.getName()); + visit(visitor, "query_term", _query_term); + } }; } @@ -278,14 +288,14 @@ public: template <bool interleaved_features> std::unique_ptr<queryeval::SimpleLeafBlueprint> FieldIndex<interleaved_features>::make_term_blueprint(const vespalib::string& term, - const queryeval::FieldSpecBase& field, + const queryeval::FieldSpec& field, uint32_t field_id) { auto guard = takeGenerationGuard(); auto posting_itr = findFrozen(term); bool use_bit_vector = field.isFilter(); return std::make_unique<MemoryTermBlueprint<interleaved_features>> - (std::move(guard), posting_itr, getFeatureStore(), field, field_id, use_bit_vector); + (std::move(guard), posting_itr, getFeatureStore(), field, field_id, term, use_bit_vector); } template class FieldIndex<false>; diff --git a/searchlib/src/vespa/searchlib/memoryindex/field_index.h b/searchlib/src/vespa/searchlib/memoryindex/field_index.h index 9f9f4124100..fb02ed880b4 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/field_index.h +++ b/searchlib/src/vespa/searchlib/memoryindex/field_index.h @@ -103,7 +103,7 @@ public: fef::TermFieldMatchDataArray match_data) const; std::unique_ptr<queryeval::SimpleLeafBlueprint> make_term_blueprint(const vespalib::string& term, - const queryeval::FieldSpecBase& field, + const queryeval::FieldSpec& field, uint32_t field_id) override; }; diff --git a/searchlib/src/vespa/searchlib/memoryindex/i_field_index.h b/searchlib/src/vespa/searchlib/memoryindex/i_field_index.h index 5a3d2f6160d..b250c18625d 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/i_field_index.h +++ b/searchlib/src/vespa/searchlib/memoryindex/i_field_index.h @@ -36,7 +36,7 @@ public: virtual void dump(search::index::IndexBuilder& indexBuilder) = 0; virtual std::unique_ptr<queryeval::SimpleLeafBlueprint> make_term_blueprint(const vespalib::string& term, - const queryeval::FieldSpecBase& field, + const queryeval::FieldSpec& field, uint32_t field_id) = 0; // Should only be directly used by unit tests |