summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp2
-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
8 files changed, 47 insertions, 15 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp b/searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp
index c03ed371c4b..107f85f12d1 100644
--- a/searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp
@@ -168,6 +168,8 @@ MatchEngine::performSearch(search::engine::SearchRequest::Source req)
ret->setDistributionKey(_distributionKey);
if ((ret->request->trace().getLevel() > 0) && ret->request->trace().hasTrace()) {
ret->request->trace().getRoot().setLong("distribution-key", _distributionKey);
+ DocTypeName doc_type(*ret->request);
+ ret->request->trace().getRoot().setString("document-type", doc_type.getName());
ret->request->trace().done();
search::fef::Properties & trace = ret->propertiesMap.lookupCreate("trace");
vespalib::SmartBuffer output(4_Ki);
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