diff options
author | Tor Egge <Tor.Egge@oath.com> | 2018-01-19 13:11:59 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@oath.com> | 2018-01-22 12:17:40 +0000 |
commit | 8deb17159a4be4666b4220896c26143c1d6234b8 (patch) | |
tree | 42d68834ac0abe80c848e2072d90985954fbab03 /searchlib | |
parent | 4148debe89932119346b102a81164921af007d00 (diff) |
Add imported tensor attribute vector.
Diffstat (limited to 'searchlib')
7 files changed, 194 insertions, 1 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt index e99092f0206..cc6736e21c5 100644 --- a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt @@ -47,6 +47,7 @@ vespa_add_library(searchlib_attribute OBJECT iattributemanager.cpp iattributesavetarget.cpp imported_attribute_vector.cpp + imported_attribute_vector_factory.cpp imported_attribute_vector_read_guard.cpp imported_search_context.cpp integerbase.cpp diff --git a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_factory.cpp b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_factory.cpp new file mode 100644 index 00000000000..8161abe61f4 --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_factory.cpp @@ -0,0 +1,51 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "imported_attribute_vector_factory.h" +#include "imported_attribute_vector.h" +#include <vespa/searchlib/tensor/imported_tensor_attribute_vector.h> + +namespace search::attribute { + +using search::tensor::ImportedTensorAttributeVector; + +namespace { + +BasicType::Type getBasicType(const std::shared_ptr<AttributeVector> &attr) +{ + return attr ? attr->getBasicType() : BasicType::Type::NONE; +} + +} + +std::shared_ptr<ImportedAttributeVector> +ImportedAttributeVectorFactory::create(vespalib::stringref name, + std::shared_ptr<ReferenceAttribute> reference_attribute, + std::shared_ptr<AttributeVector> target_attribute, + std::shared_ptr<IDocumentMetaStoreContext> document_meta_store, + bool use_search_cache) +{ + switch (getBasicType(target_attribute)) { + case BasicType::Type::TENSOR: + return std::make_shared<ImportedTensorAttributeVector>(name, std::move(reference_attribute), std::move(target_attribute), std::move(document_meta_store), use_search_cache); + default: + return std::make_shared<ImportedAttributeVector>(name, std::move(reference_attribute), std::move(target_attribute), std::move(document_meta_store), use_search_cache); + } +} + + +std::shared_ptr<ImportedAttributeVector> +ImportedAttributeVectorFactory::create(vespalib::stringref name, + std::shared_ptr<ReferenceAttribute> reference_attribute, + std::shared_ptr<AttributeVector> target_attribute, + std::shared_ptr<IDocumentMetaStoreContext> document_meta_store, + std::shared_ptr<BitVectorSearchCache> search_cache) +{ + switch (getBasicType(target_attribute)) { + case BasicType::Type::TENSOR: + return std::make_shared<ImportedTensorAttributeVector>(name, std::move(reference_attribute), std::move(target_attribute), std::move(document_meta_store), std::move(search_cache)); + default: + return std::make_shared<ImportedAttributeVector>(name, std::move(reference_attribute), std::move(target_attribute), std::move(document_meta_store), std::move(search_cache)); + } +} + +} // search::attribute diff --git a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_factory.h b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_factory.h new file mode 100644 index 00000000000..0826a913139 --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_factory.h @@ -0,0 +1,37 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/vespalib/stllike/string.h> +#include <memory> + +namespace search { + +class AttributeVector; +class IDocumentMetaStoreContext; + +namespace attribute { + +class BitVectorSearchCache; +class ImportedAttributeVector; +class ReferenceAttribute; + +class ImportedAttributeVectorFactory { +public: + static std::shared_ptr<ImportedAttributeVector> + create(vespalib::stringref name, + std::shared_ptr<ReferenceAttribute> reference_attribute, + std::shared_ptr<AttributeVector> target_attribute, + std::shared_ptr<IDocumentMetaStoreContext> document_meta_store, + bool use_search_cache); + + static std::shared_ptr<ImportedAttributeVector> + create(vespalib::stringref name, + std::shared_ptr<ReferenceAttribute> reference_attribute, + std::shared_ptr<AttributeVector> target_attribute, + std::shared_ptr<IDocumentMetaStoreContext> document_meta_store, + std::shared_ptr<BitVectorSearchCache> search_cache); +}; + +} // attribute +} // search diff --git a/searchlib/src/vespa/searchlib/tensor/CMakeLists.txt b/searchlib/src/vespa/searchlib/tensor/CMakeLists.txt index f0c8832d0ef..de2b01a1697 100644 --- a/searchlib/src/vespa/searchlib/tensor/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/tensor/CMakeLists.txt @@ -6,6 +6,7 @@ vespa_add_library(searchlib_tensor OBJECT dense_tensor_store.cpp generic_tensor_attribute.cpp generic_tensor_store.cpp + imported_tensor_attribute_vector.cpp tensor_attribute.cpp generic_tensor_attribute_saver.cpp tensor_store.cpp diff --git a/searchlib/src/vespa/searchlib/tensor/imported_tensor_attribute_vector.cpp b/searchlib/src/vespa/searchlib/tensor/imported_tensor_attribute_vector.cpp new file mode 100644 index 00000000000..0b1f779d5f5 --- /dev/null +++ b/searchlib/src/vespa/searchlib/tensor/imported_tensor_attribute_vector.cpp @@ -0,0 +1,64 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "imported_tensor_attribute_vector.h" +#include <vespa/eval/tensor/tensor.h> + +namespace search::tensor { + +using vespalib::tensor::Tensor; + +ImportedTensorAttributeVector::ImportedTensorAttributeVector(vespalib::stringref name, + std::shared_ptr<ReferenceAttribute> reference_attribute, + std::shared_ptr<AttributeVector> target_attribute, + std::shared_ptr<IDocumentMetaStoreContext> document_meta_store, + bool use_search_cache) + : ImportedAttributeVector(name, std::move(reference_attribute), + std::move(target_attribute), + std::move(document_meta_store), + use_search_cache), + _target_tensor_attribute(dynamic_cast<const ITensorAttribute &>(*_target_attribute)) +{ +} + +ImportedTensorAttributeVector::ImportedTensorAttributeVector(vespalib::stringref name, + std::shared_ptr<ReferenceAttribute> reference_attribute, + std::shared_ptr<AttributeVector> target_attribute, + std::shared_ptr<IDocumentMetaStoreContext> document_meta_store, + std::shared_ptr<BitVectorSearchCache> search_cache) + : ImportedAttributeVector(name, std::move(reference_attribute), + std::move(target_attribute), + std::move(document_meta_store), + std::move(search_cache)), + _target_tensor_attribute(dynamic_cast<const ITensorAttribute &>(*_target_attribute)) +{ +} + +ImportedTensorAttributeVector::~ImportedTensorAttributeVector() +{ +} + +std::unique_ptr<Tensor> +ImportedTensorAttributeVector::getTensor(uint32_t docId) const +{ + return _target_tensor_attribute.getTensor(_reference_attribute->getReferencedLid(docId)); +} + +std::unique_ptr<Tensor> +ImportedTensorAttributeVector::getEmptyTensor() const +{ + return _target_tensor_attribute.getEmptyTensor(); +} + +void +ImportedTensorAttributeVector::getTensor(uint32_t docId, vespalib::tensor::MutableDenseTensorView &tensor) const +{ + _target_tensor_attribute.getTensor(_reference_attribute->getReferencedLid(docId), tensor); +} + +vespalib::eval::ValueType +ImportedTensorAttributeVector::getTensorType() const +{ + return _target_tensor_attribute.getTensorType(); +} + +} diff --git a/searchlib/src/vespa/searchlib/tensor/imported_tensor_attribute_vector.h b/searchlib/src/vespa/searchlib/tensor/imported_tensor_attribute_vector.h new file mode 100644 index 00000000000..082044155b3 --- /dev/null +++ b/searchlib/src/vespa/searchlib/tensor/imported_tensor_attribute_vector.h @@ -0,0 +1,38 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/searchlib/attribute/imported_attribute_vector.h> +#include "i_tensor_attribute.h" + +namespace search::tensor { + +/** + * Attribute vector for imported tensor attributes. + */ +class ImportedTensorAttributeVector : public attribute::ImportedAttributeVector, + public ITensorAttribute +{ + using ReferenceAttribute = attribute::ReferenceAttribute; + using BitVectorSearchCache = attribute::BitVectorSearchCache; + const ITensorAttribute &_target_tensor_attribute; +public: + ImportedTensorAttributeVector(vespalib::stringref name, + std::shared_ptr<ReferenceAttribute> reference_attribute, + std::shared_ptr<AttributeVector> target_attribute, + std::shared_ptr<IDocumentMetaStoreContext> document_meta_store, + bool use_search_cache); + ImportedTensorAttributeVector(vespalib::stringref name, + std::shared_ptr<ReferenceAttribute> reference_attribute, + std::shared_ptr<AttributeVector> target_attribute, + std::shared_ptr<IDocumentMetaStoreContext> document_meta_store, + std::shared_ptr<BitVectorSearchCache> search_cache); + ~ImportedTensorAttributeVector(); + + virtual std::unique_ptr<Tensor> getTensor(uint32_t docId) const override; + virtual std::unique_ptr<Tensor> getEmptyTensor() const override; + virtual void getTensor(uint32_t docId, vespalib::tensor::MutableDenseTensorView &tensor) const override; + virtual vespalib::eval::ValueType getTensorType() const override; +}; + +} // namespace search::tensor diff --git a/searchlib/src/vespa/searchlib/test/imported_attribute_fixture.h b/searchlib/src/vespa/searchlib/test/imported_attribute_fixture.h index f9e3de79144..6917e41853a 100644 --- a/searchlib/src/vespa/searchlib/test/imported_attribute_fixture.h +++ b/searchlib/src/vespa/searchlib/test/imported_attribute_fixture.h @@ -9,6 +9,7 @@ #include <vespa/searchlib/attribute/attributeguard.h> #include <vespa/searchlib/attribute/floatbase.h> #include <vespa/searchlib/attribute/imported_attribute_vector.h> +#include <vespa/searchlib/attribute/imported_attribute_vector_factory.h> #include <vespa/searchlib/attribute/integerbase.h> #include <vespa/searchlib/attribute/not_implemented_attribute.h> #include <vespa/searchlib/attribute/stringbase.h> @@ -157,7 +158,7 @@ struct ImportedAttributeFixture { std::shared_ptr<ImportedAttributeVector> create_attribute_vector_from_members(vespalib::stringref name = default_imported_attr_name()) { - return std::make_shared<ImportedAttributeVector>(name, reference_attr, target_attr, document_meta_store, use_search_cache); + return ImportedAttributeVectorFactory::create(name, reference_attr, target_attr, document_meta_store, use_search_cache); } template<typename AttrVecType> |