summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-12-17 04:09:47 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2016-12-17 04:09:47 +0100
commitc3947c40abbdc0d12c789b794f43c5b3b85afffb (patch)
tree90a656f917c166026925661f94ab6cf8ca9ab503 /searchlib
parent8e5629fcfa8da53aed44d2778ec5efbfcea017dd (diff)
Split the source selector out too.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp8
-rw-r--r--searchlib/src/tests/queryeval/queryeval.cpp7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp17
-rw-r--r--searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/attribute/fixedsourceselector.h13
-rw-r--r--searchlib/src/vespa/searchlib/attribute/sourceselector.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/sourceselector.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.h9
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/isourceselector.h73
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp14
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h18
12 files changed, 79 insertions, 94 deletions
diff --git a/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp b/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp
index a3595f8724d..a8d53314745 100644
--- a/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp
+++ b/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp
@@ -89,13 +89,13 @@ void Test::testSourceSelector(const DocSource *docSource, size_t sz,
uint8_t defaultSource, ISourceSelector &selector)
{
{
- ISourceSelector::Iterator::UP it(selector.createIterator());
+ auto it(selector.createIterator());
for (size_t i = 0; i < sz; ++i) {
EXPECT_EQUAL(docSource[i].source, it->getSource(docSource[i].docId));
}
}
{
- ISourceSelector::Iterator::UP it(selector.createIterator());
+ auto it(selector.createIterator());
for (size_t i = 0, j = 0; i <= docSource[sz - 1].docId; ++i) {
if (i != docSource[j].docId) {
EXPECT_EQUAL(defaultSource, it->getSource(i));
@@ -122,7 +122,7 @@ Test::requireThatSelectorCanCloneAndSubtract()
EXPECT_EQUAL(base_id + diff, new_selector->getBaseId());
EXPECT_EQUAL(maxDocId+1, new_selector->getDocIdLimit());
- ISourceSelector::Iterator::UP it(new_selector->createIterator());
+ auto it(new_selector->createIterator());
for(size_t i = 0; i < arraysize(docs); ++i) {
if (docs[i].source > diff) {
EXPECT_EQUAL(docs[i].source - diff, it->getSource(docs[i].docId));
@@ -176,7 +176,7 @@ Test::requireThatCompleteSourceRangeIsHandled()
for (uint32_t i = 0; i < ISourceSelector::SOURCE_LIMIT; ++i) {
selector.setSource(i, i);
}
- ISourceSelector::Iterator::UP itr = selector.createIterator();
+ auto itr = selector.createIterator();
for (uint32_t i = 0; i < ISourceSelector::SOURCE_LIMIT; ++i) {
EXPECT_EQUAL((queryeval::Source)i, itr->getSource(i));
}
diff --git a/searchlib/src/tests/queryeval/queryeval.cpp b/searchlib/src/tests/queryeval/queryeval.cpp
index 65feb69a3e2..d0ebffb17d1 100644
--- a/searchlib/src/tests/queryeval/queryeval.cpp
+++ b/searchlib/src/tests/queryeval/queryeval.cpp
@@ -20,6 +20,7 @@
#include <vespa/searchlib/attribute/singlenumericattribute.hpp>
#include <vespa/searchlib/attribute/singlesmallnumericattribute.h>
#include <vespa/vespalib/test/insertion_operators.h>
+#include <vespa/searchlib/queryeval/isourceselector.h>
#include <vespa/searchlib/fef/fef.h>
@@ -61,16 +62,16 @@ class ISourceSelectorDummy : public ISourceSelector
static SourceStore _sourceStoreDummy;
public:
- static Iterator::UP
+ static std::unique_ptr<sourceselector::Iterator>
makeDummyIterator()
{
- return Iterator::UP(new Iterator(_sourceStoreDummy));
+ return std::make_unique<sourceselector::Iterator>(_sourceStoreDummy);
}
};
ISourceSelector::SourceStore ISourceSelectorDummy::_sourceStoreDummy("foo");
-ISourceSelector::Iterator::UP selector() {
+std::unique_ptr<sourceselector::Iterator> selector() {
return ISourceSelectorDummy::makeDummyIterator();
}
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
index 517998af50f..dc70a8c7193 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
@@ -1,9 +1,5 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/fastos/fastos.h>
-#include <vespa/log/log.h>
-LOG_SETUP(".searchlib.attribute.attribute_blueprint_factory");
-
#include "attribute_blueprint_factory.h"
#include "attribute_weighted_set_blueprint.h"
#include "i_document_weight_attribute.h"
@@ -14,30 +10,25 @@ LOG_SETUP(".searchlib.attribute.attribute_blueprint_factory");
#include <vespa/searchlib/attribute/iattributemanager.h>
#include <vespa/searchlib/common/location.h>
#include <vespa/searchlib/common/locationiterators.h>
-#include <vespa/searchlib/fef/termfieldmatchdata.h>
#include <vespa/searchlib/query/tree/stackdumpcreator.h>
#include <vespa/searchlib/queryeval/andsearchstrict.h>
#include <vespa/searchlib/queryeval/create_blueprint_visitor_helper.h>
#include <vespa/searchlib/queryeval/document_weight_search_iterator.h>
-#include <vespa/searchlib/queryeval/dot_product_blueprint.h>
#include <vespa/searchlib/queryeval/dot_product_search.h>
#include <vespa/searchlib/queryeval/emptysearch.h>
-#include <vespa/searchlib/queryeval/get_weight_from_node.h>
#include <vespa/searchlib/queryeval/intermediate_blueprints.h>
#include <vespa/searchlib/queryeval/leaf_blueprints.h>
#include <vespa/searchlib/queryeval/orlikesearch.h>
-#include <vespa/searchlib/queryeval/orsearch.h>
#include <vespa/searchlib/queryeval/predicate_blueprint.h>
-#include <vespa/searchlib/queryeval/searchiterator.h>
-#include <vespa/searchlib/queryeval/termasstring.h>
-#include <vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h>
#include <vespa/searchlib/queryeval/wand/parallel_weak_and_search.h>
-#include <vespa/searchlib/queryeval/wand/weak_and_heap.h>
#include <vespa/searchlib/queryeval/weighted_set_term_search.h>
+#include <vespa/searchlib/query/queryterm.h>
#include <sstream>
-#include <utility>
#include <vespa/vespalib/util/regexp.h>
+#include <vespa/log/log.h>
+LOG_SETUP(".searchlib.attribute.attribute_blueprint_factory");
+
using search::AttributeVector;
using search::fef::TermFieldMatchData;
using search::fef::TermFieldMatchDataArray;
diff --git a/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp b/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp
index ba36774bf29..ee3950aaef4 100644
--- a/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.cpp
@@ -11,10 +11,9 @@ namespace {
}
FixedSourceSelector::Iterator::Iterator(const FixedSourceSelector & sourceSelector) :
- ISourceSelector::Iterator(sourceSelector._source),
+ IIterator(sourceSelector._source),
_attributeGuard(sourceSelector._realSource)
-{
-}
+{ }
FixedSourceSelector::FixedSourceSelector(queryeval::Source defaultSource,
const vespalib::string & attrBaseFileName,
diff --git a/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.h b/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.h
index 3e787523909..1aa98932adf 100644
--- a/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.h
+++ b/searchlib/src/vespa/searchlib/attribute/fixedsourceselector.h
@@ -16,9 +16,10 @@ private:
}
void reserve(uint32_t numDocs);
+ using IIterator = queryeval::sourceselector::Iterator;
public:
typedef std::unique_ptr<FixedSourceSelector> UP;
- class Iterator : public ISourceSelector::Iterator {
+ class Iterator : public IIterator {
private:
AttributeGuard _attributeGuard;
public:
@@ -29,18 +30,18 @@ public:
FixedSourceSelector(queryeval::Source defaultSource,
const vespalib::string & attrBaseFileName,
uint32_t initialNumDocs = 0);
- virtual ~FixedSourceSelector();
+ ~FixedSourceSelector();
FixedSourceSelector::UP cloneAndSubtract(const vespalib::string & attrBaseFileName, uint32_t diff);
static FixedSourceSelector::UP load(const vespalib::string & baseFileName);
// Inherit doc from ISourceSelector
- virtual void setSource(uint32_t docId, queryeval::Source source);
- virtual uint32_t getDocIdLimit() const {
+ void setSource(uint32_t docId, queryeval::Source source) final override;
+ uint32_t getDocIdLimit() const final override {
return _source.getNumDocs() - 1;
}
- virtual ISourceSelector::Iterator::UP createIterator() const {
- return ISourceSelector::Iterator::UP(new Iterator(*this));
+ std::unique_ptr<IIterator> createIterator() const final override {
+ return std::make_unique<Iterator>(*this);
}
};
diff --git a/searchlib/src/vespa/searchlib/attribute/sourceselector.cpp b/searchlib/src/vespa/searchlib/attribute/sourceselector.cpp
index ae76e9e27a2..fe2d48d48dc 100644
--- a/searchlib/src/vespa/searchlib/attribute/sourceselector.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/sourceselector.cpp
@@ -119,7 +119,7 @@ SourceSelector::extractLoadInfo(const vespalib::string & baseFileName)
SourceSelector::Histogram SourceSelector::getDistribution() const
{
Histogram h;
- ISourceSelector::Iterator::UP it = createIterator();
+ auto it = createIterator();
for (size_t i(0), m(getDocIdLimit()); i < m; i++) {
h.inc(it->getSource(i));
}
diff --git a/searchlib/src/vespa/searchlib/attribute/sourceselector.h b/searchlib/src/vespa/searchlib/attribute/sourceselector.h
index 424839c7495..8219a0903b3 100644
--- a/searchlib/src/vespa/searchlib/attribute/sourceselector.h
+++ b/searchlib/src/vespa/searchlib/attribute/sourceselector.h
@@ -78,7 +78,7 @@ public:
// Inherit doc from ISourceSelector
virtual void setSource(uint32_t docId, queryeval::Source source) = 0;
- virtual ISourceSelector::Iterator::UP createIterator() const = 0;
+ virtual std::unique_ptr<queryeval::sourceselector::Iterator> createIterator() const = 0;
};
} // namespace search
diff --git a/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp b/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp
index 0144e09f618..8e221b33add 100644
--- a/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp
@@ -1,8 +1,5 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/fastos/fastos.h>
-#include <vespa/log/log.h>
-LOG_SETUP(".queryeval.intermediate_blueprints");
#include "intermediate_blueprints.h"
#include "andnotsearch.h"
#include "andsearch.h"
@@ -13,8 +10,10 @@ LOG_SETUP(".queryeval.intermediate_blueprints");
#include "equivsearch.h"
#include "termwise_blueprint_helper.h"
#include "termwise_search.h"
+#include "isourceselector.h"
#include <vespa/searchlib/queryeval/wand/weak_and_search.h>
+
namespace search {
namespace queryeval {
diff --git a/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.h b/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.h
index b36538b55d4..bd01be98ef2 100644
--- a/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.h
+++ b/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.h
@@ -3,7 +3,6 @@
#pragma once
#include "blueprint.h"
-#include "isourceselector.h"
#include "searchable.h"
#include <vespa/searchlib/queryeval/multisearch.h>
#include <vector>
@@ -12,6 +11,8 @@
namespace search {
namespace queryeval {
+class ISourceSelector;
+
//-----------------------------------------------------------------------------
class AndNotBlueprint : public IntermediateBlueprint
@@ -174,8 +175,6 @@ public:
bool isCompatibleWith(const SourceBlenderBlueprint &other) const;
};
-//-----------------------------------------------------------------------------
-
-} // namespace queryeval
-} // namespace search
+}
+}
diff --git a/searchlib/src/vespa/searchlib/queryeval/isourceselector.h b/searchlib/src/vespa/searchlib/queryeval/isourceselector.h
index 4d3ce3ee302..86c2d13ad8c 100644
--- a/searchlib/src/vespa/searchlib/queryeval/isourceselector.h
+++ b/searchlib/src/vespa/searchlib/queryeval/isourceselector.h
@@ -10,56 +10,49 @@ namespace queryeval {
typedef uint8_t Source;
+namespace sourceselector {
+
+class Iterator {
+public:
+ using SourceStore = SingleValueNumericAttribute<IntegerAttributeTemplate<int8_t> >;
+
+ Iterator(const SourceStore & source) : _source(source) { }
+ Iterator(const Iterator &) = delete;
+ Iterator & operator = (const Iterator &) = delete;
+ virtual ~Iterator() { }
+ /**
+ * Obtain the source to be used for the given document. This
+ * function should always be called with increasing document
+ * ids.
+ *
+ * @return source id
+ * @param docId document id
+ **/
+ queryeval::Source getSource(uint32_t docId) const {
+ return _source.getFast(docId);
+ }
+
+ uint32_t getDocIdLimit(void) const {
+ return _source.getCommittedDocIdLimit();
+ }
+private:
+ const SourceStore & _source;
+};
+
+}
+
/**
* Component used to select between sources during result blending.
**/
class ISourceSelector
{
protected:
- typedef SingleValueNumericAttribute<IntegerAttributeTemplate<int8_t> > SourceStore;
+ using SourceStore = sourceselector::Iterator::SourceStore;
public:
typedef std::unique_ptr<ISourceSelector> UP;
typedef std::shared_ptr<ISourceSelector> SP;
static const Source SOURCE_LIMIT = 254u;
- /**
- * Read-only interface to the data held by the parent source
- * selector.
- **/
- class Iterator {
- public:
- Iterator(const SourceStore & source)
- : _source(source)
- {
- }
- typedef std::unique_ptr<Iterator> UP;
-
- /**
- * Obtain the source to be used for the given document. This
- * function should always be called with increasing document
- * ids.
- *
- * @return source id
- * @param docId document id
- **/
- queryeval::Source getSource(uint32_t docId) const {
- return _source.getFast(docId);
- }
-
- /**
- * empty; defined for safe subclassing.
- **/
- virtual ~Iterator() {}
-
- uint32_t
- getDocIdLimit(void) const
- {
- return _source.getCommittedDocIdLimit();
- }
- private:
- const SourceStore & _source;
- };
-
protected:
ISourceSelector(Source defaultSource);
public:
@@ -87,7 +80,7 @@ public:
*
* @return source selection iterator
**/
- virtual Iterator::UP createIterator() const = 0;
+ virtual std::unique_ptr<sourceselector::Iterator> createIterator() const = 0;
/**
* empty; defined for safe subclassing.
diff --git a/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp b/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp
index 8b49f9ea7f2..395a54cbc86 100644
--- a/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp
@@ -1,6 +1,7 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "sourceblendersearch.h"
+#include "isourceselector.h"
#include <vespa/vespalib/objects/visit.hpp>
#include <vespa/vespalib/util/array.hpp>
@@ -12,7 +13,7 @@ EmptySearch SourceBlenderSearch::_emptySearch;
class SourceBlenderSearchStrict : public SourceBlenderSearch
{
public:
- SourceBlenderSearchStrict(ISourceSelector::Iterator::UP sourceSelector, const Children &children);
+ SourceBlenderSearchStrict(std::unique_ptr<Iterator> sourceSelector, const Children &children);
private:
VESPA_DLL_LOCAL void advance() __attribute__((noinline));
vespalib::Array<SearchIterator *> _nextChildren;
@@ -22,7 +23,7 @@ private:
};
SourceBlenderSearchStrict::SourceBlenderSearchStrict(
- ISourceSelector::Iterator::UP sourceSelector,
+ std::unique_ptr<Iterator> sourceSelector,
const Children &children)
: SourceBlenderSearch(std::move(sourceSelector), children),
_nextChildren()
@@ -107,7 +108,7 @@ SourceBlenderSearch::doUnpack(uint32_t docid)
}
SourceBlenderSearch::SourceBlenderSearch(
- ISourceSelector::Iterator::UP sourceSelector,
+ std::unique_ptr<sourceselector::Iterator> sourceSelector,
const Children &children) :
_matchedChild(NULL),
_sourceSelector(std::move(sourceSelector)),
@@ -160,10 +161,9 @@ SourceBlenderSearch::~SourceBlenderSearch()
}
}
-SourceBlenderSearch * SourceBlenderSearch::create(
- ISourceSelector::Iterator::UP sourceSelector,
- const Children &children,
- bool strict)
+SourceBlenderSearch *
+SourceBlenderSearch::create(std::unique_ptr<sourceselector::Iterator> sourceSelector,
+ const Children &children, bool strict)
{
if (strict) {
return new SourceBlenderSearchStrict(std::move(sourceSelector), children);
diff --git a/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h b/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h
index 81688184fa5..dadc4cccaa6 100644
--- a/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h
+++ b/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h
@@ -5,11 +5,11 @@
#include <vespa/vespalib/util/array.h>
#include "searchiterator.h"
#include "emptysearch.h"
-#include "isourceselector.h"
namespace search {
namespace queryeval {
+ namespace sourceselector { class Iterator; }
/**
* A simple implementation of the source blender operation. This class
* is used to blend results from multiple sources. Each source is
@@ -41,17 +41,19 @@ private:
virtual bool isSourceBlender() const { return true; }
static EmptySearch _emptySearch;
protected:
+ using Iterator = sourceselector::Iterator;
+ using Source = uint8_t;
typedef std::vector<Source> SourceIndex;
- SearchIterator * _matchedChild;
- ISourceSelector::Iterator::UP _sourceSelector;
- SourceIndex _children;
- uint32_t _docIdLimit;
- SearchIterator * _sources[256];
+ SearchIterator * _matchedChild;
+ std::unique_ptr<Iterator> _sourceSelector;
+ SourceIndex _children;
+ uint32_t _docIdLimit;
+ SearchIterator * _sources[256];
void doSeek(uint32_t docid) override;
void doUnpack(uint32_t docid) override;
Trinary is_strict() const override { return Trinary::False; }
- SourceBlenderSearch(ISourceSelector::Iterator::UP sourceSelector, const Children &children);
+ SourceBlenderSearch(std::unique_ptr<Iterator> sourceSelector, const Children &children);
SearchIterator * getSearch(Source source) const { return _sources[source]; }
public:
/**
@@ -67,7 +69,7 @@ public:
* @param strict whether this search is strict
* (a strict search will locate its next hit when seeking fails)
**/
- static SourceBlenderSearch * create(ISourceSelector::Iterator::UP sourceSelector,
+ static SourceBlenderSearch * create(std::unique_ptr<Iterator> sourceSelector,
const Children &children, bool strict);
virtual ~SourceBlenderSearch();
size_t getNumChildren() const { return _children.size(); }