summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-04-07 18:44:22 +0200
committerGitHub <noreply@github.com>2022-04-07 18:44:22 +0200
commit7563ab1357379a560de5622750d817aac6bd117c (patch)
tree20aa20fb7e61838a2fe2b0f9dacfafcd5e5bc540 /searchlib
parentfac065affc2d04e4b927e98a732b046fa73b43cf (diff)
parent3efc8f5ab5d8e8788dc4e2f921c95d03a672d1e1 (diff)
Merge branch 'master' into bratseth/inputs
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp34
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/flagattribute.cpp1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp2
7 files changed, 42 insertions, 8 deletions
diff --git a/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp b/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp
index 605a59b8a6a..192e137ddff 100644
--- a/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp
+++ b/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp
@@ -152,6 +152,16 @@ struct StringAttributeFiller {
}
};
+struct WsetStringAttributeFiller {
+ using ValueType = vespalib::string;
+ static void add(AttributeVector& attr, const vespalib::string& value) {
+ auto& real = downcast<StringAttribute>(attr);
+ uint32_t docid = attr.getNumDocs() - 1;
+ real.append(docid, value, 1);
+ real.commit();
+ }
+};
+
struct IntegerAttributeFiller {
using ValueType = int64_t;
static void add(AttributeVector& attr, int64_t value) {
@@ -183,6 +193,17 @@ make_string_attribute(const std::string& value)
}
AttributeVector::SP
+make_wset_string_attribute(const std::string& value)
+{
+ Config cfg(BasicType::STRING, CollectionType::WSET);
+ // fast-search is needed to trigger use of DirectAttributeBlueprint.
+ cfg.setFastSearch(true);
+ auto attr = AttributeFactory::createAttribute(field, cfg);
+ fill<WsetStringAttributeFiller>(*attr, value);
+ return attr;
+}
+
+AttributeVector::SP
make_int_attribute(int64_t value)
{
Config cfg(BasicType::INT32, CollectionType::SINGLE);
@@ -413,4 +434,17 @@ TEST(AttributeBlueprintTest, attribute_field_blueprint_wraps_filter_search_itera
EXPECT_TRUE(wrapper.seek(2));
}
+TEST(AttributeBlueprintTest, direct_attribute_blueprint_wraps_filter_search_iterator)
+{
+ BlueprintFactoryFixture f(make_wset_string_attribute("foo"));
+ SimpleStringTerm term("foo", field, 0, Weight(0));
+ auto blueprint = f.create_blueprint(term);
+
+ auto itr = blueprint->createFilterSearch(true, Blueprint::FilterConstraint::UPPER_BOUND);
+ auto& wrapper = downcast<FilterWrapper>(*itr);
+ wrapper.initRange(1, 3);
+ EXPECT_FALSE(wrapper.seek(1));
+ EXPECT_TRUE(wrapper.seek(2));
+}
+
GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
index f14966dbfc8..bde73faf466 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
@@ -562,6 +562,13 @@ public:
return std::make_unique<queryeval::DocumentWeightSearchIterator>(*tfmda[0], _attr, _dict_entry);
}
+ SearchIteratorUP createFilterSearch(bool strict, FilterConstraint constraint) const override {
+ (void) constraint; // We provide an iterator with exact results, so no need to take constraint into consideration.
+ auto wrapper = std::make_unique<FilterWrapper>(getState().numFields());
+ wrapper->wrap(createLeafSearch(wrapper->tfmda(), strict));
+ return wrapper;
+ }
+
void visitMembers(vespalib::ObjectVisitor &visitor) const override {
LeafBlueprint::visitMembers(visitor);
visit(visitor, "attribute", _attrName);
diff --git a/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp b/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp
index 346c238f0cc..17a898765d3 100644
--- a/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp
@@ -4,6 +4,7 @@
#include "load_utils.hpp"
#include "multinumericattribute.hpp"
#include "multi_numeric_flag_search_context.h"
+#include <vespa/searchlib/common/bitvector.h>
#include <vespa/log/log.h>
LOG_SETUP(".searchlib.attribute.flag_attribute");
diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
index 99963094366..39e4f6866fb 100644
--- a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp
@@ -4,13 +4,11 @@
#include "multinumericattribute.h"
#include "multivalueattribute.hpp"
#include "attributevector.hpp"
-#include "attributeiterators.hpp"
#include "multinumericattributesaver.h"
#include "multi_numeric_search_context.h"
#include "load_utils.h"
#include "primitivereader.h"
#include <vespa/searchlib/query/query_term_simple.h>
-#include <vespa/searchlib/queryeval/emptysearch.h>
#include <vespa/searchlib/util/fileutil.h>
namespace search {
diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
index c35a2e55ec3..3323440dd0d 100644
--- a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp
@@ -2,13 +2,11 @@
#pragma once
-#include "attributeiterators.hpp"
#include "load_utils.h"
#include "loadednumericvalue.h"
#include "multinumericenumattribute.h"
#include "multi_numeric_enum_search_context.h"
#include <vespa/searchlib/query/query_term_simple.h>
-#include <vespa/searchlib/queryeval/emptysearch.h>
#include <vespa/searchlib/util/fileutil.hpp>
namespace search {
diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
index cf60183e2ca..917f0f55894 100644
--- a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp
@@ -1,7 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
-#include "attributeiterators.hpp"
#include "attributevector.hpp"
#include "load_utils.h"
#include "numeric_matcher.h"
@@ -11,7 +10,6 @@
#include "singlenumericattributesaver.h"
#include "single_numeric_search_context.h"
#include <vespa/searchlib/query/query_term_simple.h>
-#include <vespa/searchlib/queryeval/emptysearch.h>
namespace search {
diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
index f5219e2e8c7..aefc3c1cba3 100644
--- a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp
@@ -2,7 +2,6 @@
#pragma once
-#include "attributeiterators.hpp"
#include "load_utils.h"
#include "loadednumericvalue.h"
#include "primitivereader.h"
@@ -10,7 +9,6 @@
#include "singlenumericenumattribute.h"
#include "single_numeric_enum_search_context.h"
#include <vespa/searchlib/query/query_term_simple.h>
-#include <vespa/searchlib/queryeval/emptysearch.h>
#include <vespa/searchlib/util/fileutil.hpp>
namespace search {