summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-09-26 13:30:50 +0000
committerGeir Storli <geirst@yahooinc.com>2022-09-26 13:30:50 +0000
commit656ef6ae9f6154117b3e297f9e76fcbd7336b9a2 (patch)
tree1ac39326a5f0c59e73351af34fcddbccea7926bf /searchlib
parented48985f772b02dbb19ab9f1324ee65f37659b05 (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')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/diskindex.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp17
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h8
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/field_index.cpp24
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/field_index.h2
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/i_field_index.h2
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 &params)
: 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