summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-07-23 12:37:14 +0200
committerGitHub <noreply@github.com>2018-07-23 12:37:14 +0200
commitce4798777d1991beb72c3df2e54352db3eb1a4ee (patch)
treef2abfe9d2a098067b3d61a368c4fd3f9c1986802
parenta2b96031d9dd0df98169ad3d2ad6ce3b1710eefc (diff)
parent48229248e29b32d6b2108ada576ba8e362e9916c (diff)
Merge pull request #6446 from vespa-engine/balder/haunt-mysterious-andnot-bug
Balder/haunt mysterious andnot bug
-rw-r--r--searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/match_thread.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/result_processor.cpp20
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp26
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h16
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/andnotsearch.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/andnotsearch.h8
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/blueprint.cpp1
8 files changed, 46 insertions, 37 deletions
diff --git a/searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp b/searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp
index 48baba329ca..3ef5a0f63b1 100644
--- a/searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp
+++ b/searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp
@@ -21,9 +21,7 @@ GroupingManager::GroupingManager(GroupingContext & groupingContext)
{
}
-GroupingManager::~GroupingManager()
-{
-}
+GroupingManager::~GroupingManager() = default;
using search::expression::ExpressionNode;
using search::expression::AttributeNode;
diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_thread.h b/searchcore/src/vespa/searchcore/proton/matching/match_thread.h
index 5c78ee59b1d..8384a45e0e2 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/match_thread.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/match_thread.h
@@ -103,7 +103,7 @@ public:
ResultProcessor &rp,
vespalib::DualMergeDirector &md,
uint32_t distributionKey);
- virtual void run() override;
+ void run() override;
const MatchingStats::Partition &get_thread_stats() const { return thread_stats; }
double get_match_time() const { return match_time_s; }
PartialResult::UP extract_result() { return std::move(resultContext->result); }
diff --git a/searchcore/src/vespa/searchcore/proton/matching/result_processor.cpp b/searchcore/src/vespa/searchcore/proton/matching/result_processor.cpp
index 325803d5aa6..dedda1504a5 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/result_processor.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/result_processor.cpp
@@ -24,7 +24,7 @@ ResultProcessor::Result::Result(std::unique_ptr<search::engine::SearchReply> rep
_numFs4Hits(numFs4Hits)
{ }
-ResultProcessor::Result::~Result() { }
+ResultProcessor::Result::~Result() = default;
ResultProcessor::Sort::Sort(uint32_t partitionId, const vespalib::Doom & doom, IAttributeContext &ac, const vespalib::string &ss)
: sorter(FastS_DefaultResultSorter::instance()),
@@ -43,7 +43,7 @@ ResultProcessor::Context::Context(Sort::UP s, PartialResult::UP r, GroupingConte
groupingSource(grouping.get())
{ }
-ResultProcessor::Context::~Context() { }
+ResultProcessor::Context::~Context() = default;
void
ResultProcessor::GroupingSource::merge(Source &s) {
@@ -75,11 +75,11 @@ ResultProcessor::ResultProcessor(IAttributeContext &attrContext,
_wasMerged(false)
{
if (!_groupingContext.empty()) {
- _groupingSession.reset(new GroupingSession(sessionId, _groupingContext, attrContext));
+ _groupingSession = std::make_unique<GroupingSession>(sessionId, _groupingContext, attrContext);
}
}
-ResultProcessor::~ResultProcessor() { }
+ResultProcessor::~ResultProcessor() = default;
void
ResultProcessor::prepareThreadContextCreation(size_t num_threads)
@@ -95,19 +95,19 @@ ResultProcessor::prepareThreadContextCreation(size_t num_threads)
ResultProcessor::Context::UP
ResultProcessor::createThreadContext(const vespalib::Doom & hardDoom, size_t thread_id, uint32_t distributionKey)
{
- Sort::UP sort(new Sort(distributionKey, hardDoom, _attrContext, _sortSpec));
- PartialResult::UP result(new PartialResult((_offset + _hits), sort->hasSortData()));
+ auto sort = std::make_unique<Sort>(distributionKey, hardDoom, _attrContext, _sortSpec);
+ auto result = std::make_unique<PartialResult>((_offset + _hits), sort->hasSortData());
search::grouping::GroupingContext::UP groupingContext;
- if (_groupingSession.get() != 0) {
+ if (_groupingSession) {
groupingContext = _groupingSession->createThreadContext(thread_id, _attrContext);
}
- return Context::UP(new Context(std::move(sort), std::move(result), std::move(groupingContext)));
+ return std::make_unique<Context>(std::move(sort), std::move(result), std::move(groupingContext));
}
ResultProcessor::Result::UP
ResultProcessor::makeReply(PartialResultUP full_result)
{
- search::engine::SearchReply::UP reply(new search::engine::SearchReply());
+ auto reply = std::make_unique<search::engine::SearchReply>();
const search::IDocumentMetaStore &metaStore = _metaStore;
search::engine::SearchReply &r = *reply;
PartialResult &result = *full_result;
@@ -158,7 +158,7 @@ ResultProcessor::makeReply(PartialResultUP full_result)
assert(sortOffset == sortDataSize);
}
numFs4Hits += reply->hits.size();
- return Result::UP(new Result(std::move(reply), numFs4Hits));
+ return std::make_unique<Result>(std::move(reply), numFs4Hits);
}
}
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp
index 2ad1cc0d739..8bbe1fd4337 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp
@@ -7,6 +7,8 @@
#include <vespa/searchlib/common/bitvector.h>
#include <vespa/vespalib/stllike/hash_map.h>
#include <vespa/searchlib/fef/matchdatalayout.h>
+#include <vespa/vespalib/objects/visit.h>
+#include <vespa/vespalib/util/stringfmt.h>
namespace search {
@@ -166,11 +168,11 @@ AttributeWeightedSetBlueprint::createLeafSearch(const fef::TermFieldMatchDataArr
assert(isSingleValue);
(void) isSingleValue;
if (isString) {
- return queryeval::SearchIterator::UP(new AttributeFilter<UseStringEnum>(tfmd, _attr, _weights, _contexts));
+ return std::make_unique<AttributeFilter<UseStringEnum>>(tfmd, _attr, _weights, _contexts);
} else {
assert(isInteger);
(void) isInteger;
- return queryeval::SearchIterator::UP(new AttributeFilter<UseInteger>(tfmd, _attr, _weights, _contexts));
+ return std::make_unique<AttributeFilter<UseInteger>>(tfmd, _attr, _weights, _contexts);
}
}
}
@@ -179,10 +181,26 @@ void
AttributeWeightedSetBlueprint::fetchPostings(bool strict)
{
if (strict) {
- for (size_t i = 0; i < _contexts.size(); ++i) {
- _contexts[i]->fetchPostings(true);
+ for (auto * context : _contexts) {
+ context->fetchPostings(true);
}
}
}
+void
+AttributeWeightedSetBlueprint::visitMembers(vespalib::ObjectVisitor &visitor) const
+{
+ ComplexLeafBlueprint::visitMembers(visitor);
+ visitor.visitString("attribute", _attr.getName());
+ visitor.openStruct("terms", "TermList");
+ for (size_t i = 0; i < _contexts.size(); ++i) {
+ const ISearchContext * context = _contexts[i];
+ visitor.openStruct(vespalib::make_string("[%zu]", i), "Term");
+ visitor.visitString("term", context->queryTerm().getTerm());
+ visitor.visitInt("weight", _weights[i]);
+ visitor.closeStruct();
+ }
+ visitor.closeStruct();
+}
+
} // namespace search
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h b/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h
index 3b4bbd2d916..d66a544e77a 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h
@@ -16,21 +16,21 @@ class AttributeWeightedSetBlueprint : public queryeval::ComplexLeafBlueprint
private:
using ISearchContext = attribute::ISearchContext;
using IAttributeVector = attribute::IAttributeVector;
- size_t _numDocs;
- size_t _estHits;
- std::vector<int32_t> _weights;
- const IAttributeVector & _attr;
- std::vector<ISearchContext*> _contexts;
-
- AttributeWeightedSetBlueprint(const AttributeWeightedSetBlueprint &); // disabled
- AttributeWeightedSetBlueprint &operator=(const AttributeWeightedSetBlueprint &); // disabled
+ size_t _numDocs;
+ size_t _estHits;
+ std::vector<int32_t> _weights;
+ const IAttributeVector & _attr;
+ std::vector<ISearchContext*> _contexts;
public:
+ AttributeWeightedSetBlueprint(const AttributeWeightedSetBlueprint &) = delete;
+ AttributeWeightedSetBlueprint &operator=(const AttributeWeightedSetBlueprint &) = delete;
AttributeWeightedSetBlueprint(const queryeval::FieldSpec &field, const IAttributeVector & attr);
~AttributeWeightedSetBlueprint();
void addToken(std::unique_ptr<ISearchContext> context, int32_t weight);
queryeval::SearchIterator::UP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool strict) const override;
void fetchPostings(bool strict) override;
+ void visitMembers(vespalib::ObjectVisitor &visitor) const override;
};
} // namespace search
diff --git a/searchlib/src/vespa/searchlib/queryeval/andnotsearch.cpp b/searchlib/src/vespa/searchlib/queryeval/andnotsearch.cpp
index 77f8e454035..5646af9e677 100644
--- a/searchlib/src/vespa/searchlib/queryeval/andnotsearch.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/andnotsearch.cpp
@@ -4,8 +4,7 @@
#include "termwise_helper.h"
#include <vespa/searchlib/common/bitvector.h>
-namespace search {
-namespace queryeval {
+namespace search::queryeval {
void
AndNotSearch::doSeek(uint32_t docid)
@@ -160,5 +159,4 @@ AndNotSearch::or_hits_into(BitVector &result, uint32_t begin_id) {
result.orWith(*get_hits(begin_id));
}
-} // namespace queryeval
-} // namespace search
+}
diff --git a/searchlib/src/vespa/searchlib/queryeval/andnotsearch.h b/searchlib/src/vespa/searchlib/queryeval/andnotsearch.h
index e805448ef98..c29ef9407ad 100644
--- a/searchlib/src/vespa/searchlib/queryeval/andnotsearch.h
+++ b/searchlib/src/vespa/searchlib/queryeval/andnotsearch.h
@@ -2,13 +2,11 @@
#pragma once
-#include <vector>
#include "multisearch.h"
#include <vespa/searchlib/attribute/attributeiterators.h>
#include <vespa/searchlib/attribute/singlesmallnumericattribute.h>
-namespace search {
-namespace queryeval {
+namespace search::queryeval {
/**
* A simple implementation of the AndNot search operation.
@@ -97,6 +95,4 @@ private:
void doUnpack(uint32_t docid) override;
};
-} // namespace queryeval
-} // namespace search
-
+}
diff --git a/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
index 1ad4d60bc7f..c99e07cd355 100644
--- a/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
@@ -133,7 +133,6 @@ Blueprint::visitMembers(vespalib::ObjectVisitor &visitor) const
for (size_t i = 0; i < state.numFields(); ++i) {
const FieldSpecBase &spec = state.field(i);
visitor.openStruct(vespalib::make_string("[%zu]", i), "Field");
- // visitor.visitString("name", spec.getName());
visitor.visitInt("fieldId", spec.getFieldId());
visitor.visitInt("handle", spec.getHandle());
visitor.visitBool("isFilter", spec.isFilter());