diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-07-23 12:37:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-23 12:37:14 +0200 |
commit | ce4798777d1991beb72c3df2e54352db3eb1a4ee (patch) | |
tree | f2abfe9d2a098067b3d61a368c4fd3f9c1986802 | |
parent | a2b96031d9dd0df98169ad3d2ad6ce3b1710eefc (diff) | |
parent | 48229248e29b32d6b2108ada576ba8e362e9916c (diff) |
Merge pull request #6446 from vespa-engine/balder/haunt-mysterious-andnot-bug
Balder/haunt mysterious andnot bug
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()); |