diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-13 15:14:29 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-13 15:38:58 +0000 |
commit | 7bf5c4d363334993135f9edf77d9bbed306d03e4 (patch) | |
tree | fff4671819427a68568239479b0c86e2630a699a /searchcore | |
parent | eb7242e20b41625bf5416897ab28ffcf06a68487 (diff) |
Use a vector backed set for speed.
Diffstat (limited to 'searchcore')
3 files changed, 14 insertions, 18 deletions
diff --git a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp index ed4c8938aa1..d941a9f35b7 100644 --- a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp +++ b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp @@ -757,9 +757,7 @@ TEST("require that document selection and timestamp range works together") { } TEST("require that fieldset limits fields returned") { - document::Field::Set fields; - fields.insert(&getDocType().getField("header")); - document::FieldCollection limited(getDocType(), std::move(fields)); + document::FieldCollection limited(getDocType(), document::Field::Set::Builder().insert(&getDocType().getField("header")).build()); DocumentIterator itr(bucket(5), limited, selectAll(), newestV(), -1, false); itr.add(doc_with_fields("id:ns:foo::xxx1", Timestamp(1), bucket(5))); IterateResult res = itr.iterate(largeNum); diff --git a/searchcore/src/tests/proton/server/documentretriever_test.cpp b/searchcore/src/tests/proton/server/documentretriever_test.cpp index c9fece26655..a6f98719da2 100644 --- a/searchcore/src/tests/proton/server/documentretriever_test.cpp +++ b/searchcore/src/tests/proton/server/documentretriever_test.cpp @@ -583,7 +583,7 @@ struct Lookup : public IFieldInfo Lookup() : _count(0) {} bool isFieldAttribute(const document::Field & field) const override { _count++; - return (field.getName()[0] == 'a'); + return ((field.getName()[0] % 2) == 1); // a, c, e... are attributes } mutable unsigned _count; }; @@ -592,29 +592,27 @@ TEST("require that fieldset can figure out their attributeness and rember it") { Lookup lookup; FieldSetAttributeDB fsDB(lookup); document::Field attr1("attr1", 1, *document::DataType::LONG); - document::Field attr2("attr2", 2, *document::DataType::LONG); - document::Field not_attr1("not_attr1", 3, *document::DataType::LONG); - document::Field::Set allAttr; - allAttr.insert(&attr1); + document::Field attr2("cttr2", 2, *document::DataType::LONG); + document::Field not_attr1("b_not_attr1", 3, *document::DataType::LONG); + document::Field::Set allAttr = document::Field::Set::Builder().insert(&attr1).build(); EXPECT_TRUE(fsDB.areAllFieldsAttributes(13, allAttr)); EXPECT_EQUAL(1u, lookup._count); EXPECT_TRUE(fsDB.areAllFieldsAttributes(13, allAttr)); EXPECT_EQUAL(1u, lookup._count); - allAttr.insert(&attr2); + allAttr = document::Field::Set::Builder().insert(&attr1).insert(&attr2).build(); EXPECT_TRUE(fsDB.areAllFieldsAttributes(17, allAttr)); EXPECT_EQUAL(3u, lookup._count); EXPECT_TRUE(fsDB.areAllFieldsAttributes(17, allAttr)); EXPECT_EQUAL(3u, lookup._count); - document::Field::Set notAllAttr; - notAllAttr.insert(¬_attr1); + document::Field::Set notAllAttr = document::Field::Set::Builder().insert(¬_attr1).build(); EXPECT_FALSE(fsDB.areAllFieldsAttributes(33, notAllAttr)); EXPECT_EQUAL(4u, lookup._count); EXPECT_FALSE(fsDB.areAllFieldsAttributes(33, notAllAttr)); EXPECT_EQUAL(4u, lookup._count); - notAllAttr.insert(&attr1); + notAllAttr = document::Field::Set::Builder().insert(&attr1).insert(¬_attr1).insert(&attr2).build(); EXPECT_FALSE(fsDB.areAllFieldsAttributes(39, notAllAttr)); EXPECT_EQUAL(6u, lookup._count); EXPECT_FALSE(fsDB.areAllFieldsAttributes(39, notAllAttr)); diff --git a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp index 4484338ddfd..cd0a0fcc971 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp @@ -82,7 +82,7 @@ DocumentRetriever _attr_manager(attr_manager), _doc_store(doc_store), _possiblePositionFields(), - _attributeFields(), + _attributeFields(document::Field::Set::Builder().build()), _areAllFieldsAttributes(true), _fieldSetAttributeInfo(*this) { @@ -90,6 +90,7 @@ DocumentRetriever document::Field::Set fields = documentType->getFieldSet(); int32_t positionDataTypeId = PositionDataType::getInstance().getId(); LOG(debug, "checking document type '%s' for position fields", docTypeName.getName().c_str()); + document::Field::Set::Builder attrBuilder; for (const document::Field * field : fields) { if ((field->getDataType().getId() == positionDataTypeId) || is_array_of_position_type(field->getDataType())) { LOG(debug, "Field '%s' is a position field", field->getName().data()); @@ -109,12 +110,13 @@ DocumentRetriever && ((*attr)->getBasicType() != BasicType::PREDICATE) && ((*attr)->getBasicType() != BasicType::REFERENCE)) { - _attributeFields.insert(field); + attrBuilder.insert(field); } else { _areAllFieldsAttributes = false; } } } + _attributeFields = attrBuilder.build(); } bool @@ -139,7 +141,7 @@ DocumentRetriever::needFetchFromDocStore(const document::FieldSet & fieldSet) co bool DocumentRetriever::isFieldAttribute(const document::Field & field) const { - return _attributeFields.find(&field) != _attributeFields.end(); + return _attributeFields.contains(field); } DocumentRetriever::~DocumentRetriever() = default; @@ -245,9 +247,7 @@ DocumentRetriever::getPartialDocument(search::DocumentIdT lid, const document::D break; case document::FieldSet::Type::FIELD: { const auto & field = static_cast<const document::Field &>(fieldSet); - document::Field::Set attributes; - attributes.insert(&field); - populate(lid, *doc, attributes); + populate(lid, *doc, document::Field::Set::Builder().insert(&field).build()); break; } case document::FieldSet::Type::SET: { |