diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index d62caf8c2..62261040b 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -29,7 +29,7 @@ env: WEAVIATE_135: 1.35.18 WEAVIATE_136: 1.36.12 WEAVIATE_137: 1.37.5-e0fe0d5.amd64 - WEAVIATE_139: 1.39.0-rc.0-b41225e.amd64 + WEAVIATE_139: 1.39.0-rc.1-89299a5.amd64 jobs: lint-and-format: diff --git a/docs/changelog.rst b/docs/changelog.rst index 17427c0ef..4f43070d8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,12 @@ Changelog ========= +Version 4.23.0 +-------------- +This minor version includes: + - Support for new 1.39 features: + - Add support for the new cross-property ``And`` BM25 search operator through ``BM25Operator.and_cross()``, available on the ``bm25`` and ``hybrid`` query, generative-query, and aggregation methods. Unlike ``BM25Operator.and_()``, a query token may be matched by any of the searched properties instead of having to occur within a single one. All searched properties must share the same tokenization and analyzer settings. Requires Weaviate ``1.37.15``, ``1.38.8``, ``1.39.0`` or higher + Version 4.22.0 -------------- This minor version includes: diff --git a/integration/test_collection.py b/integration/test_collection.py index d2745112d..e13479c14 100644 --- a/integration/test_collection.py +++ b/integration/test_collection.py @@ -36,12 +36,17 @@ ) from weaviate.collections.classes.internal import Object, ReferenceToMulti, _CrossReference from weaviate.collections.classes.types import PhoneNumber, WeaviateProperties, _PhoneNumber +from weaviate.collections.grpc.shared import ( + _BM25_AND_CROSS_MIN_VERSIONS, + _BM25_AND_CROSS_MIN_VERSIONS_STR, +) from weaviate.exceptions import ( UnexpectedStatusCodeError, WeaviateInsertInvalidPropertyError, WeaviateInsertManyAllFailedError, WeaviateInvalidInputError, WeaviateQueryError, + WeaviateUnsupportedFeatureError, ) from weaviate.types import UUID, UUIDS @@ -1756,3 +1761,76 @@ def test_bm25_operators(collection_factory: CollectionFactory) -> None: assert len(objs.objects) == 4 assert objs.objects[0].uuid == uuid2 assert sorted(obj.uuid for obj in objs.objects[1:]) == sorted([uuid1, uuid3, uuid4]) + + +def test_bm25_operator_and_cross(collection_factory: CollectionFactory) -> None: + collection = collection_factory( + properties=[ + Property(name="title", data_type=DataType.TEXT), + Property(name="body", data_type=DataType.TEXT), + ], + vectorizer_config=Configure.Vectorizer.none(), + ) + + if not collection._connection._weaviate_version.is_at_least_any(*_BM25_AND_CROSS_MIN_VERSIONS): + pytest.skip(f"bm25 cross-property AND requires {_BM25_AND_CROSS_MIN_VERSIONS_STR}") + + # Only `split_across` needs cross-property matching: neither of its properties holds both tokens. + split_across = collection.data.insert({"title": "banana", "body": "split"}) + single_property = collection.data.insert({"title": "banana split", "body": "dessert"}) + partial = collection.data.insert({"title": "banana", "body": "bread"}) + + and_cross = collection.query.bm25("banana split", operator=wvc.query.BM25Operator.and_cross()) + assert sorted(obj.uuid for obj in and_cross.objects) == sorted([split_across, single_property]) + + or_ = collection.query.bm25( + "banana split", operator=wvc.query.BM25Operator.or_(minimum_match=1) + ) + assert sorted(obj.uuid for obj in or_.objects) == sorted( + [split_across, single_property, partial] + ) + + # Per-property AND is at most as permissive as cross-property AND. Which of the two it is + # depends on whether the server took the BlockMax or the legacy WAND path, so only the + # subset relation is asserted. + and_ = collection.query.bm25("banana split", operator=wvc.query.BM25Operator.and_()) + assert {obj.uuid for obj in and_.objects} <= {obj.uuid for obj in and_cross.objects} + + +def test_bm25_operator_and_cross_mismatched_tokenization( + collection_factory: CollectionFactory, +) -> None: + collection = collection_factory( + properties=[ + Property(name="title", data_type=DataType.TEXT, tokenization=Tokenization.WORD), + Property(name="body", data_type=DataType.TEXT, tokenization=Tokenization.FIELD), + ], + vectorizer_config=Configure.Vectorizer.none(), + ) + + if not collection._connection._weaviate_version.is_at_least_any(*_BM25_AND_CROSS_MIN_VERSIONS): + pytest.skip(f"bm25 cross-property AND requires {_BM25_AND_CROSS_MIN_VERSIONS_STR}") + + collection.data.insert({"title": "banana", "body": "split"}) + + with pytest.raises(WeaviateQueryError): + collection.query.bm25( + "banana split", + query_properties=["title", "body"], + operator=wvc.query.BM25Operator.and_cross(), + ) + + +def test_bm25_operator_and_cross_unsupported_version( + collection_factory: CollectionFactory, +) -> None: + collection = collection_factory( + properties=[Property(name="name", data_type=DataType.TEXT)], + vectorizer_config=Configure.Vectorizer.none(), + ) + + if collection._connection._weaviate_version.is_at_least_any(*_BM25_AND_CROSS_MIN_VERSIONS): + pytest.skip("server supports bm25 cross-property AND") + + with pytest.raises(WeaviateUnsupportedFeatureError): + collection.query.bm25("banana split", operator=wvc.query.BM25Operator.and_cross()) diff --git a/integration/test_collection_hybrid.py b/integration/test_collection_hybrid.py index 696cf5b43..9c62c1233 100644 --- a/integration/test_collection_hybrid.py +++ b/integration/test_collection_hybrid.py @@ -21,6 +21,10 @@ _HybridNearVector, ) from weaviate.collections.classes.internal import Object +from weaviate.collections.grpc.shared import ( + _BM25_AND_CROSS_MIN_VERSIONS, + _BM25_AND_CROSS_MIN_VERSIONS_STR, +) from weaviate.exceptions import ( WeaviateUnsupportedFeatureError, ) @@ -528,3 +532,51 @@ def test_hybrid_bm25_operators(collection_factory: CollectionFactory) -> None: assert len(objs.objects) == 4 assert objs.objects[0].uuid == uuid2 assert sorted(obj.uuid for obj in objs.objects[1:]) == sorted([uuid1, uuid3, uuid4]) + + +def test_hybrid_bm25_operator_and_cross(collection_factory: CollectionFactory) -> None: + collection = collection_factory( + properties=[ + Property(name="title", data_type=DataType.TEXT), + Property(name="body", data_type=DataType.TEXT), + ], + vectorizer_config=Configure.Vectorizer.none(), + ) + + if not collection._connection._weaviate_version.is_at_least_any(*_BM25_AND_CROSS_MIN_VERSIONS): + pytest.skip(f"bm25 cross-property AND requires {_BM25_AND_CROSS_MIN_VERSIONS_STR}") + + # Only `split_across` needs cross-property matching: neither of its properties holds both tokens. + split_across = collection.data.insert({"title": "banana", "body": "split"}, vector=[1, 0, 0, 0]) + single_property = collection.data.insert( + {"title": "banana split", "body": "dessert"}, vector=[0, 1, 0, 0] + ) + collection.data.insert({"title": "banana", "body": "bread"}, vector=[0, 0, 1, 0]) + + objs = collection.query.hybrid( + "banana split", + vector=None, + alpha=0.0, + bm25_operator=wvc.query.BM25Operator.and_cross(), + ) + assert sorted(obj.uuid for obj in objs.objects) == sorted([split_across, single_property]) + + +def test_hybrid_bm25_operator_and_cross_unsupported_version( + collection_factory: CollectionFactory, +) -> None: + collection = collection_factory( + properties=[Property(name="name", data_type=DataType.TEXT)], + vectorizer_config=Configure.Vectorizer.none(), + ) + + if collection._connection._weaviate_version.is_at_least_any(*_BM25_AND_CROSS_MIN_VERSIONS): + pytest.skip("server supports bm25 cross-property AND") + + with pytest.raises(WeaviateUnsupportedFeatureError): + collection.query.hybrid( + "banana split", + vector=None, + alpha=0.0, + bm25_operator=wvc.query.BM25Operator.and_cross(), + ) diff --git a/test/collection/test_bm25_operator.py b/test/collection/test_bm25_operator.py new file mode 100644 index 000000000..8fee41d20 --- /dev/null +++ b/test/collection/test_bm25_operator.py @@ -0,0 +1,155 @@ +"""Unit tests: BM25 search operators are wired into the gRPC request and version-gated. + +``BM25Operator.and_cross()`` maps to the ``OPERATOR_AND_CROSS`` enum added in Weaviate 1.39.0 and +backported to 1.38.8 and 1.37.15, so the client must reject it on servers outside those ranges +rather than send an enum value the server will not understand. +""" + +from typing import Optional + +import pytest + +from weaviate.classes.query import BM25Operator +from weaviate.collections.classes.grpc import BM25OperatorOptions +from weaviate.collections.grpc.aggregate import _AggregateGRPC +from weaviate.collections.grpc.query import _QueryGRPC +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1 import base_search_pb2 +from weaviate.util import _ServerVersion + +_SUPPORTED = ["1.37.15", "1.38.8", "1.39.0", "1.40.0"] +_UNSUPPORTED = ["1.36.9", "1.37.14", "1.38.0", "1.38.7"] + + +def _query(version: str = "1.39.0") -> _QueryGRPC: + return _QueryGRPC( + weaviate_version=_ServerVersion.from_string(version), + name="Dummy", + tenant=None, + consistency_level=None, + validate_arguments=True, + uses_125_api=True, + uses_127_api=True, + ) + + +def _aggregate(version: str = "1.39.0") -> _AggregateGRPC: + return _AggregateGRPC( + weaviate_version=_ServerVersion.from_string(version), + name="Dummy", + tenant=None, + consistency_level=None, + validate_arguments=True, + ) + + +def _aggregate_hybrid( + builder: _AggregateGRPC, operator: Optional[BM25OperatorOptions] +) -> base_search_pb2.Hybrid: + return builder.hybrid( + query="banana two", + alpha=0.0, + vector=None, + properties=None, + target_vector=None, + bm25_operator=operator, + aggregations=[], + filters=None, + group_by=None, + limit=None, + object_limit=None, + objects_count=False, + ).hybrid + + +@pytest.mark.parametrize( + "operator,expected,minimum_or_tokens_match", + [ + (BM25Operator.and_(), base_search_pb2.SearchOperatorOptions.OPERATOR_AND, 0), + (BM25Operator.or_(minimum_match=2), base_search_pb2.SearchOperatorOptions.OPERATOR_OR, 2), + ( + BM25Operator.and_cross(), + base_search_pb2.SearchOperatorOptions.OPERATOR_AND_CROSS, + 0, + ), + ], +) +def test_bm25_operator_wired_into_request( + operator: BM25OperatorOptions, + expected: "base_search_pb2.SearchOperatorOptions.Operator", + minimum_or_tokens_match: int, +) -> None: + search_operator = ( + _query().bm25(query="banana two", operator=operator).bm25_search.search_operator + ) + assert search_operator.operator == expected + assert search_operator.minimum_or_tokens_match == minimum_or_tokens_match + + +@pytest.mark.parametrize( + "operator,expected", + [ + (BM25Operator.and_(), base_search_pb2.SearchOperatorOptions.OPERATOR_AND), + (BM25Operator.or_(minimum_match=2), base_search_pb2.SearchOperatorOptions.OPERATOR_OR), + (BM25Operator.and_cross(), base_search_pb2.SearchOperatorOptions.OPERATOR_AND_CROSS), + ], +) +def test_hybrid_bm25_operator_wired_into_request( + operator: BM25OperatorOptions, expected: "base_search_pb2.SearchOperatorOptions.Operator" +) -> None: + req = _query().hybrid(query="banana two", alpha=0.0, bm25_operator=operator) + assert req.hybrid_search.bm25_search_operator.operator == expected + + +def test_no_operator_leaves_search_operator_unset() -> None: + assert not _query().bm25(query="banana two").bm25_search.HasField("search_operator") + req = _query().hybrid(query="banana two", alpha=0.0) + assert not req.hybrid_search.HasField("bm25_search_operator") + + +@pytest.mark.parametrize("version", _SUPPORTED) +def test_and_cross_allowed_on_supported_versions(version: str) -> None: + req = _query(version).bm25(query="banana two", operator=BM25Operator.and_cross()) + assert ( + req.bm25_search.search_operator.operator + == base_search_pb2.SearchOperatorOptions.OPERATOR_AND_CROSS + ) + + +@pytest.mark.parametrize("version", _UNSUPPORTED) +def test_and_cross_rejected_on_unsupported_versions(version: str) -> None: + with pytest.raises(WeaviateUnsupportedFeatureError) as e: + _query(version).bm25(query="banana two", operator=BM25Operator.and_cross()) + assert "1.37.15 or 1.38.8 or 1.39.0" in str(e.value) + assert version in str(e.value) + + +@pytest.mark.parametrize("version", _UNSUPPORTED) +def test_hybrid_and_cross_rejected_on_unsupported_versions(version: str) -> None: + with pytest.raises(WeaviateUnsupportedFeatureError): + _query(version).hybrid( + query="banana two", alpha=0.0, bm25_operator=BM25Operator.and_cross() + ) + + +@pytest.mark.parametrize("version", _UNSUPPORTED) +def test_aggregate_hybrid_and_cross_rejected_on_unsupported_versions(version: str) -> None: + with pytest.raises(WeaviateUnsupportedFeatureError): + _aggregate_hybrid(_aggregate(version), BM25Operator.and_cross()) + + +def test_aggregate_hybrid_and_cross_allowed_on_supported_version() -> None: + hybrid = _aggregate_hybrid(_aggregate("1.39.0"), BM25Operator.and_cross()) + assert ( + hybrid.bm25_search_operator.operator + == base_search_pb2.SearchOperatorOptions.OPERATOR_AND_CROSS + ) + + +@pytest.mark.parametrize("version", _UNSUPPORTED) +@pytest.mark.parametrize("operator", [BM25Operator.and_(), BM25Operator.or_(minimum_match=1), None]) +def test_other_operators_unaffected_by_gate( + version: str, operator: Optional[BM25OperatorOptions] +) -> None: + _query(version).bm25(query="banana two", operator=operator) + _query(version).hybrid(query="banana two", alpha=0.0, bm25_operator=operator) diff --git a/test/test_server_version.py b/test/test_server_version.py index 1cf5e6097..20ae0b9cc 100644 --- a/test/test_server_version.py +++ b/test/test_server_version.py @@ -60,6 +60,34 @@ def test_server_version_is_at_least(is_valid: bool) -> None: assert is_valid +@pytest.mark.parametrize( + "version,expected", + [ + ("1.36.9", False), + ("1.37.14", False), + ("1.37.15", True), + ("1.37.99", True), + ("1.38.0", False), + ("1.38.7", False), + ("1.38.8", True), + ("1.38.20", True), + ("1.39.0", True), + ("1.40.0", True), + ("2.0.0", True), + ], +) +def test_server_version_is_at_least_any(version: str, expected: bool) -> None: + assert ( + _ServerVersion.from_string(version).is_at_least_any((1, 37, 15), (1, 38, 8), (1, 39, 0)) + is expected + ) + + +def test_server_version_is_at_least_any_single_minimum() -> None: + assert _ServerVersion(1, 39, 0).is_at_least_any((1, 39, 0)) + assert not _ServerVersion(1, 38, 99).is_at_least_any((1, 39, 0)) + + def test_server_version_magic_methods() -> None: # Test __eq__ assert _ServerVersion(1, 2, 3) == _ServerVersion(1, 2, 3) diff --git a/weaviate/collections/classes/grpc.py b/weaviate/collections/classes/grpc.py index f5c8fe772..5cba315f7 100644 --- a/weaviate/collections/classes/grpc.py +++ b/weaviate/collections/classes/grpc.py @@ -672,6 +672,13 @@ class BM25OperatorAnd(BM25OperatorOptions): operator = base_search_pb2.SearchOperatorOptions.OPERATOR_AND +@dataclass +class BM25OperatorAndCross(BM25OperatorOptions): + """Define the cross-property 'And' operator for keyword queries.""" + + operator = base_search_pb2.SearchOperatorOptions.OPERATOR_AND_CROSS + + class BM25OperatorFactory: """Define how the BM25 query's token matching should be performed.""" @@ -697,6 +704,20 @@ def and_() -> BM25OperatorOptions: """ return BM25OperatorAnd() + @staticmethod + def and_cross() -> BM25OperatorOptions: + """Use the cross-property 'And' operator for keyword queries, where all query tokens must match across the searched properties combined. + + Unlike `and_()`, which requires every token to occur within a single property, a token may be + matched by any of the searched properties, as long as each token is matched by at least one. + + All searched properties must share the same tokenization and analyzer settings; the server + rejects the query otherwise. + + Requires Weaviate `1.37.15`, `1.38.8`, `1.39.0` or higher. + """ + return BM25OperatorAndCross() + OneDimensionalVectorType = Sequence[NUMBER] """Represents a one-dimensional vector, e.g. one produced by the `Configure.Vectors.text2vec_jinaai()` module""" diff --git a/weaviate/collections/grpc/query.py b/weaviate/collections/grpc/query.py index 46593da10..281da6e2d 100644 --- a/weaviate/collections/grpc/query.py +++ b/weaviate/collections/grpc/query.py @@ -24,7 +24,6 @@ REFERENCE, REFERENCES, BM25OperatorOptions, - BM25OperatorOr, HybridFusion, HybridVectorType, Move, @@ -243,14 +242,7 @@ def bm25( base_search_pb2.BM25( query=query, properties=properties if properties is not None else [], - search_operator=base_search_pb2.SearchOperatorOptions( - operator=operator.operator, - minimum_or_tokens_match=operator.minimum_should_match - if isinstance(operator, BM25OperatorOr) - else None, - ) - if operator is not None - else None, + search_operator=self._bm25_operator_to_grpc(operator), ) if query is not None else None diff --git a/weaviate/collections/grpc/shared.py b/weaviate/collections/grpc/shared.py index 51e2a65c7..3b39a611b 100644 --- a/weaviate/collections/grpc/shared.py +++ b/weaviate/collections/grpc/shared.py @@ -18,6 +18,7 @@ from weaviate.collections.classes.config import ConsistencyLevel from weaviate.collections.classes.grpc import ( MMR, + BM25OperatorAndCross, BM25OperatorOptions, BM25OperatorOr, HybridFusion, @@ -35,6 +36,7 @@ ) from weaviate.exceptions import ( WeaviateInvalidInputError, + WeaviateUnsupportedFeatureError, ) from weaviate.proto.v1 import base_pb2, base_search_pb2 from weaviate.types import NUMBER, UUID @@ -49,6 +51,12 @@ UINT32_LEN = 4 UINT64_LEN = 8 +# Cross-property AND was backported to the 1.37 and 1.38 branches after landing in 1.39. +_BM25_AND_CROSS_MIN_VERSIONS = ((1, 37, 15), (1, 38, 8), (1, 39, 0)) +_BM25_AND_CROSS_MIN_VERSIONS_STR = " or ".join( + f"{major}.{minor}.{patch}" for major, minor, patch in _BM25_AND_CROSS_MIN_VERSIONS +) + class _BaseGRPC: def __init__( @@ -76,6 +84,30 @@ def _get_consistency_level( assert consistency_level.value == ConsistencyLevel.ALL return base_pb2.ConsistencyLevel.CONSISTENCY_LEVEL_ALL + def _bm25_operator_to_grpc( + self, bm25_operator: Optional[BM25OperatorOptions] + ) -> Optional["base_search_pb2.SearchOperatorOptions"]: + if bm25_operator is None: + return None + + if isinstance( + bm25_operator, BM25OperatorAndCross + ) and not self._weaviate_version.is_at_least_any(*_BM25_AND_CROSS_MIN_VERSIONS): + raise WeaviateUnsupportedFeatureError( + "BM25Operator.and_cross()", + str(self._weaviate_version), + _BM25_AND_CROSS_MIN_VERSIONS_STR, + ) + + return base_search_pb2.SearchOperatorOptions( + operator=bm25_operator.operator, + minimum_or_tokens_match=( + bm25_operator.minimum_should_match + if isinstance(bm25_operator, BM25OperatorOr) + else None + ), + ) + def _recompute_target_vector_to_grpc( self, target_vector: Optional[TargetVectorJoinType], @@ -741,14 +773,7 @@ def _parse_hybrid( vector_distance=distance, vectors=vectors, selection=self._diversity_selection_to_grpc(diversity_selection), - bm25_search_operator=base_search_pb2.SearchOperatorOptions( - operator=bm25_operator.operator, - minimum_or_tokens_match=bm25_operator.minimum_should_match - if isinstance(bm25_operator, BM25OperatorOr) - else None, - ) - if bm25_operator is not None - else None, + bm25_search_operator=self._bm25_operator_to_grpc(bm25_operator), ) if query is not None or vector is not None else None diff --git a/weaviate/proto/v1/v4216/v1/base_search_pb2.py b/weaviate/proto/v1/v4216/v1/base_search_pb2.py index aa4fdf57d..460ed4fd0 100644 --- a/weaviate/proto/v1/v4216/v1/base_search_pb2.py +++ b/weaviate/proto/v1/v4216/v1/base_search_pb2.py @@ -14,7 +14,7 @@ from weaviate.proto.v1.v4216.v1 import base_pb2 as v1_dot_base__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14v1/base_search.proto\x12\x0bweaviate.v1\x1a\rv1/base.proto\"2\n\x10WeightsForTarget\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0e\n\x06weight\x18\x02 \x01(\x02\"\x98\x01\n\x07Targets\x12\x16\n\x0etarget_vectors\x18\x01 \x03(\t\x12\x33\n\x0b\x63ombination\x18\x02 \x01(\x0e\x32\x1e.weaviate.v1.CombinationMethod\x12:\n\x13weights_for_targets\x18\x04 \x03(\x0b\x32\x1d.weaviate.v1.WeightsForTargetJ\x04\x08\x03\x10\x04\"`\n\x0fVectorForTarget\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x0cvector_bytes\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12%\n\x07vectors\x18\x03 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"\x8a\x01\n\tSelection\x12)\n\x03mmr\x18\x01 \x01(\x0b\x32\x1a.weaviate.v1.Selection.MMRH\x00\x1a\x45\n\x03MMR\x12\x12\n\x05limit\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07\x62\x61lance\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\x08\n\x06_limitB\n\n\x08_balanceB\x0b\n\tselection\"\xe1\x01\n\x15SearchOperatorOptions\x12=\n\x08operator\x18\x01 \x01(\x0e\x32+.weaviate.v1.SearchOperatorOptions.Operator\x12$\n\x17minimum_or_tokens_match\x18\x02 \x01(\x05H\x00\x88\x01\x01\"G\n\x08Operator\x12\x18\n\x14OPERATOR_UNSPECIFIED\x10\x00\x12\x0f\n\x0bOPERATOR_OR\x10\x01\x12\x10\n\x0cOPERATOR_AND\x10\x02\x42\x1a\n\x18_minimum_or_tokens_match\"\xd5\x05\n\x06Hybrid\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12\x12\n\x06vector\x18\x03 \x03(\x02\x42\x02\x18\x01\x12\x11\n\x05\x61lpha\x18\x04 \x01(\x02\x42\x02\x18\x01\x12\x33\n\x0b\x66usion_type\x18\x05 \x01(\x0e\x32\x1e.weaviate.v1.Hybrid.FusionType\x12\x18\n\x0cvector_bytes\x18\x06 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x07 \x03(\tB\x02\x18\x01\x12.\n\tnear_text\x18\x08 \x01(\x0b\x32\x1b.weaviate.v1.NearTextSearch\x12,\n\x0bnear_vector\x18\t \x01(\x0b\x32\x17.weaviate.v1.NearVector\x12%\n\x07targets\x18\n \x01(\x0b\x32\x14.weaviate.v1.Targets\x12\x45\n\x14\x62m25_search_operator\x18\x0b \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x01\x88\x01\x01\x12\x18\n\x0b\x61lpha_param\x18\x0c \x01(\x02H\x02\x88\x01\x01\x12\x17\n\x0fuse_alpha_param\x18\r \x01(\x08\x12.\n\tselection\x18\x0e \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x03\x88\x01\x01\x12\x19\n\x0fvector_distance\x18\x14 \x01(\x02H\x00\x12%\n\x07vectors\x18\x15 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"a\n\nFusionType\x12\x1b\n\x17\x46USION_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x46USION_TYPE_RANKED\x10\x01\x12\x1e\n\x1a\x46USION_TYPE_RELATIVE_SCORE\x10\x02\x42\x0b\n\tthresholdB\x17\n\x15_bm25_search_operatorB\x0e\n\x0c_alpha_paramB\x0c\n\n_selection\"\xeb\x03\n\nNearVector\x12\x12\n\x06vector\x18\x01 \x03(\x02\x42\x02\x18\x01\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x18\n\x0cvector_bytes\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x05 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x06 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12K\n\x11vector_per_target\x18\x07 \x03(\x0b\x32,.weaviate.v1.NearVector.VectorPerTargetEntryB\x02\x18\x01\x12\x38\n\x12vector_for_targets\x18\x08 \x03(\x0b\x32\x1c.weaviate.v1.VectorForTarget\x12%\n\x07vectors\x18\t \x03(\x0b\x32\x14.weaviate.v1.Vectors\x12.\n\tselection\x18\n \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x1a\x36\n\x14VectorPerTargetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe3\x01\n\nNearObject\x12\n\n\x02id\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xae\x03\n\x0eNearTextSearch\x12\r\n\x05query\x18\x01 \x03(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x36\n\x07move_to\x18\x04 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x02\x88\x01\x01\x12\x38\n\tmove_away\x18\x05 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x03\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x06 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x07 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x08 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x04\x88\x01\x01\x1a\x36\n\x04Move\x12\r\n\x05\x66orce\x18\x01 \x01(\x02\x12\x10\n\x08\x63oncepts\x18\x02 \x03(\t\x12\r\n\x05uuids\x18\x03 \x03(\tB\x0c\n\n_certaintyB\x0b\n\t_distanceB\n\n\x08_move_toB\x0c\n\n_move_awayB\x0c\n\n_selection\"\xeb\x01\n\x0fNearImageSearch\x12\r\n\x05image\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearAudioSearch\x12\r\n\x05\x61udio\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearVideoSearch\x12\r\n\x05video\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearDepthSearch\x12\r\n\x05\x64\x65pth\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xef\x01\n\x11NearThermalSearch\x12\x0f\n\x07thermal\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe7\x01\n\rNearIMUSearch\x12\x0b\n\x03imu\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\x7f\n\x04\x42M25\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12@\n\x0fsearch_operator\x18\x03 \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x00\x88\x01\x01\x42\x12\n\x10_search_operator*\xee\x01\n\x11\x43ombinationMethod\x12\"\n\x1e\x43OMBINATION_METHOD_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_SUM\x10\x01\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_MIN\x10\x02\x12#\n\x1f\x43OMBINATION_METHOD_TYPE_AVERAGE\x10\x03\x12*\n&COMBINATION_METHOD_TYPE_RELATIVE_SCORE\x10\x04\x12\"\n\x1e\x43OMBINATION_METHOD_TYPE_MANUAL\x10\x05\x42t\n#io.weaviate.client.grpc.protocol.v1B\x17WeaviateProtoBaseSearchZ4github.com/weaviate/weaviate/grpc/generated;protocolb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14v1/base_search.proto\x12\x0bweaviate.v1\x1a\rv1/base.proto\"2\n\x10WeightsForTarget\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0e\n\x06weight\x18\x02 \x01(\x02\"\x98\x01\n\x07Targets\x12\x16\n\x0etarget_vectors\x18\x01 \x03(\t\x12\x33\n\x0b\x63ombination\x18\x02 \x01(\x0e\x32\x1e.weaviate.v1.CombinationMethod\x12:\n\x13weights_for_targets\x18\x04 \x03(\x0b\x32\x1d.weaviate.v1.WeightsForTargetJ\x04\x08\x03\x10\x04\"`\n\x0fVectorForTarget\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x0cvector_bytes\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12%\n\x07vectors\x18\x03 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"\x8a\x01\n\tSelection\x12)\n\x03mmr\x18\x01 \x01(\x0b\x32\x1a.weaviate.v1.Selection.MMRH\x00\x1a\x45\n\x03MMR\x12\x12\n\x05limit\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07\x62\x61lance\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\x08\n\x06_limitB\n\n\x08_balanceB\x0b\n\tselection\"\xf9\x01\n\x15SearchOperatorOptions\x12=\n\x08operator\x18\x01 \x01(\x0e\x32+.weaviate.v1.SearchOperatorOptions.Operator\x12$\n\x17minimum_or_tokens_match\x18\x02 \x01(\x05H\x00\x88\x01\x01\"_\n\x08Operator\x12\x18\n\x14OPERATOR_UNSPECIFIED\x10\x00\x12\x0f\n\x0bOPERATOR_OR\x10\x01\x12\x10\n\x0cOPERATOR_AND\x10\x02\x12\x16\n\x12OPERATOR_AND_CROSS\x10\x03\x42\x1a\n\x18_minimum_or_tokens_match\"\xd5\x05\n\x06Hybrid\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12\x12\n\x06vector\x18\x03 \x03(\x02\x42\x02\x18\x01\x12\x11\n\x05\x61lpha\x18\x04 \x01(\x02\x42\x02\x18\x01\x12\x33\n\x0b\x66usion_type\x18\x05 \x01(\x0e\x32\x1e.weaviate.v1.Hybrid.FusionType\x12\x18\n\x0cvector_bytes\x18\x06 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x07 \x03(\tB\x02\x18\x01\x12.\n\tnear_text\x18\x08 \x01(\x0b\x32\x1b.weaviate.v1.NearTextSearch\x12,\n\x0bnear_vector\x18\t \x01(\x0b\x32\x17.weaviate.v1.NearVector\x12%\n\x07targets\x18\n \x01(\x0b\x32\x14.weaviate.v1.Targets\x12\x45\n\x14\x62m25_search_operator\x18\x0b \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x01\x88\x01\x01\x12\x18\n\x0b\x61lpha_param\x18\x0c \x01(\x02H\x02\x88\x01\x01\x12\x17\n\x0fuse_alpha_param\x18\r \x01(\x08\x12.\n\tselection\x18\x0e \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x03\x88\x01\x01\x12\x19\n\x0fvector_distance\x18\x14 \x01(\x02H\x00\x12%\n\x07vectors\x18\x15 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"a\n\nFusionType\x12\x1b\n\x17\x46USION_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x46USION_TYPE_RANKED\x10\x01\x12\x1e\n\x1a\x46USION_TYPE_RELATIVE_SCORE\x10\x02\x42\x0b\n\tthresholdB\x17\n\x15_bm25_search_operatorB\x0e\n\x0c_alpha_paramB\x0c\n\n_selection\"\xeb\x03\n\nNearVector\x12\x12\n\x06vector\x18\x01 \x03(\x02\x42\x02\x18\x01\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x18\n\x0cvector_bytes\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x05 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x06 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12K\n\x11vector_per_target\x18\x07 \x03(\x0b\x32,.weaviate.v1.NearVector.VectorPerTargetEntryB\x02\x18\x01\x12\x38\n\x12vector_for_targets\x18\x08 \x03(\x0b\x32\x1c.weaviate.v1.VectorForTarget\x12%\n\x07vectors\x18\t \x03(\x0b\x32\x14.weaviate.v1.Vectors\x12.\n\tselection\x18\n \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x1a\x36\n\x14VectorPerTargetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe3\x01\n\nNearObject\x12\n\n\x02id\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xae\x03\n\x0eNearTextSearch\x12\r\n\x05query\x18\x01 \x03(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x36\n\x07move_to\x18\x04 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x02\x88\x01\x01\x12\x38\n\tmove_away\x18\x05 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x03\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x06 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x07 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x08 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x04\x88\x01\x01\x1a\x36\n\x04Move\x12\r\n\x05\x66orce\x18\x01 \x01(\x02\x12\x10\n\x08\x63oncepts\x18\x02 \x03(\t\x12\r\n\x05uuids\x18\x03 \x03(\tB\x0c\n\n_certaintyB\x0b\n\t_distanceB\n\n\x08_move_toB\x0c\n\n_move_awayB\x0c\n\n_selection\"\xeb\x01\n\x0fNearImageSearch\x12\r\n\x05image\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearAudioSearch\x12\r\n\x05\x61udio\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearVideoSearch\x12\r\n\x05video\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearDepthSearch\x12\r\n\x05\x64\x65pth\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xef\x01\n\x11NearThermalSearch\x12\x0f\n\x07thermal\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe7\x01\n\rNearIMUSearch\x12\x0b\n\x03imu\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\x7f\n\x04\x42M25\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12@\n\x0fsearch_operator\x18\x03 \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x00\x88\x01\x01\x42\x12\n\x10_search_operator*\xee\x01\n\x11\x43ombinationMethod\x12\"\n\x1e\x43OMBINATION_METHOD_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_SUM\x10\x01\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_MIN\x10\x02\x12#\n\x1f\x43OMBINATION_METHOD_TYPE_AVERAGE\x10\x03\x12*\n&COMBINATION_METHOD_TYPE_RELATIVE_SCORE\x10\x04\x12\"\n\x1e\x43OMBINATION_METHOD_TYPE_MANUAL\x10\x05\x42t\n#io.weaviate.client.grpc.protocol.v1B\x17WeaviateProtoBaseSearchZ4github.com/weaviate/weaviate/grpc/generated;protocolb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -58,8 +58,8 @@ _NEARTHERMALSEARCH.fields_by_name['target_vectors']._serialized_options = b'\030\001' _NEARIMUSEARCH.fields_by_name['target_vectors']._options = None _NEARIMUSEARCH.fields_by_name['target_vectors']._serialized_options = b'\030\001' - _globals['_COMBINATIONMETHOD']._serialized_start=4169 - _globals['_COMBINATIONMETHOD']._serialized_end=4407 + _globals['_COMBINATIONMETHOD']._serialized_start=4193 + _globals['_COMBINATIONMETHOD']._serialized_end=4431 _globals['_WEIGHTSFORTARGET']._serialized_start=52 _globals['_WEIGHTSFORTARGET']._serialized_end=102 _globals['_TARGETS']._serialized_start=105 @@ -71,35 +71,35 @@ _globals['_SELECTION_MMR']._serialized_start=414 _globals['_SELECTION_MMR']._serialized_end=483 _globals['_SEARCHOPERATOROPTIONS']._serialized_start=499 - _globals['_SEARCHOPERATOROPTIONS']._serialized_end=724 + _globals['_SEARCHOPERATOROPTIONS']._serialized_end=748 _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_start=625 - _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_end=696 - _globals['_HYBRID']._serialized_start=727 - _globals['_HYBRID']._serialized_end=1452 - _globals['_HYBRID_FUSIONTYPE']._serialized_start=1287 - _globals['_HYBRID_FUSIONTYPE']._serialized_end=1384 - _globals['_NEARVECTOR']._serialized_start=1455 - _globals['_NEARVECTOR']._serialized_end=1946 - _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_start=1851 - _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_end=1905 - _globals['_NEAROBJECT']._serialized_start=1949 - _globals['_NEAROBJECT']._serialized_end=2176 - _globals['_NEARTEXTSEARCH']._serialized_start=2179 - _globals['_NEARTEXTSEARCH']._serialized_end=2609 - _globals['_NEARTEXTSEARCH_MOVE']._serialized_start=2488 - _globals['_NEARTEXTSEARCH_MOVE']._serialized_end=2542 - _globals['_NEARIMAGESEARCH']._serialized_start=2612 - _globals['_NEARIMAGESEARCH']._serialized_end=2847 - _globals['_NEARAUDIOSEARCH']._serialized_start=2850 - _globals['_NEARAUDIOSEARCH']._serialized_end=3085 - _globals['_NEARVIDEOSEARCH']._serialized_start=3088 - _globals['_NEARVIDEOSEARCH']._serialized_end=3323 - _globals['_NEARDEPTHSEARCH']._serialized_start=3326 - _globals['_NEARDEPTHSEARCH']._serialized_end=3561 - _globals['_NEARTHERMALSEARCH']._serialized_start=3564 - _globals['_NEARTHERMALSEARCH']._serialized_end=3803 - _globals['_NEARIMUSEARCH']._serialized_start=3806 - _globals['_NEARIMUSEARCH']._serialized_end=4037 - _globals['_BM25']._serialized_start=4039 - _globals['_BM25']._serialized_end=4166 + _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_end=720 + _globals['_HYBRID']._serialized_start=751 + _globals['_HYBRID']._serialized_end=1476 + _globals['_HYBRID_FUSIONTYPE']._serialized_start=1311 + _globals['_HYBRID_FUSIONTYPE']._serialized_end=1408 + _globals['_NEARVECTOR']._serialized_start=1479 + _globals['_NEARVECTOR']._serialized_end=1970 + _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_start=1875 + _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_end=1929 + _globals['_NEAROBJECT']._serialized_start=1973 + _globals['_NEAROBJECT']._serialized_end=2200 + _globals['_NEARTEXTSEARCH']._serialized_start=2203 + _globals['_NEARTEXTSEARCH']._serialized_end=2633 + _globals['_NEARTEXTSEARCH_MOVE']._serialized_start=2512 + _globals['_NEARTEXTSEARCH_MOVE']._serialized_end=2566 + _globals['_NEARIMAGESEARCH']._serialized_start=2636 + _globals['_NEARIMAGESEARCH']._serialized_end=2871 + _globals['_NEARAUDIOSEARCH']._serialized_start=2874 + _globals['_NEARAUDIOSEARCH']._serialized_end=3109 + _globals['_NEARVIDEOSEARCH']._serialized_start=3112 + _globals['_NEARVIDEOSEARCH']._serialized_end=3347 + _globals['_NEARDEPTHSEARCH']._serialized_start=3350 + _globals['_NEARDEPTHSEARCH']._serialized_end=3585 + _globals['_NEARTHERMALSEARCH']._serialized_start=3588 + _globals['_NEARTHERMALSEARCH']._serialized_end=3827 + _globals['_NEARIMUSEARCH']._serialized_start=3830 + _globals['_NEARIMUSEARCH']._serialized_end=4061 + _globals['_BM25']._serialized_start=4063 + _globals['_BM25']._serialized_end=4190 # @@protoc_insertion_point(module_scope) diff --git a/weaviate/proto/v1/v4216/v1/base_search_pb2.pyi b/weaviate/proto/v1/v4216/v1/base_search_pb2.pyi index b94597ecb..649a07832 100644 --- a/weaviate/proto/v1/v4216/v1/base_search_pb2.pyi +++ b/weaviate/proto/v1/v4216/v1/base_search_pb2.pyi @@ -70,9 +70,11 @@ class SearchOperatorOptions(_message.Message): OPERATOR_UNSPECIFIED: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_OR: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_AND: _ClassVar[SearchOperatorOptions.Operator] + OPERATOR_AND_CROSS: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_UNSPECIFIED: SearchOperatorOptions.Operator OPERATOR_OR: SearchOperatorOptions.Operator OPERATOR_AND: SearchOperatorOptions.Operator + OPERATOR_AND_CROSS: SearchOperatorOptions.Operator OPERATOR_FIELD_NUMBER: _ClassVar[int] MINIMUM_OR_TOKENS_MATCH_FIELD_NUMBER: _ClassVar[int] operator: SearchOperatorOptions.Operator diff --git a/weaviate/proto/v1/v5261/v1/base_search_pb2.py b/weaviate/proto/v1/v5261/v1/base_search_pb2.py index c5b9beaae..cc2952d99 100644 --- a/weaviate/proto/v1/v5261/v1/base_search_pb2.py +++ b/weaviate/proto/v1/v5261/v1/base_search_pb2.py @@ -15,7 +15,7 @@ from weaviate.proto.v1.v5261.v1 import base_pb2 as v1_dot_base__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14v1/base_search.proto\x12\x0bweaviate.v1\x1a\rv1/base.proto\"2\n\x10WeightsForTarget\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0e\n\x06weight\x18\x02 \x01(\x02\"\x98\x01\n\x07Targets\x12\x16\n\x0etarget_vectors\x18\x01 \x03(\t\x12\x33\n\x0b\x63ombination\x18\x02 \x01(\x0e\x32\x1e.weaviate.v1.CombinationMethod\x12:\n\x13weights_for_targets\x18\x04 \x03(\x0b\x32\x1d.weaviate.v1.WeightsForTargetJ\x04\x08\x03\x10\x04\"`\n\x0fVectorForTarget\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x0cvector_bytes\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12%\n\x07vectors\x18\x03 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"\x8a\x01\n\tSelection\x12)\n\x03mmr\x18\x01 \x01(\x0b\x32\x1a.weaviate.v1.Selection.MMRH\x00\x1a\x45\n\x03MMR\x12\x12\n\x05limit\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07\x62\x61lance\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\x08\n\x06_limitB\n\n\x08_balanceB\x0b\n\tselection\"\xe1\x01\n\x15SearchOperatorOptions\x12=\n\x08operator\x18\x01 \x01(\x0e\x32+.weaviate.v1.SearchOperatorOptions.Operator\x12$\n\x17minimum_or_tokens_match\x18\x02 \x01(\x05H\x00\x88\x01\x01\"G\n\x08Operator\x12\x18\n\x14OPERATOR_UNSPECIFIED\x10\x00\x12\x0f\n\x0bOPERATOR_OR\x10\x01\x12\x10\n\x0cOPERATOR_AND\x10\x02\x42\x1a\n\x18_minimum_or_tokens_match\"\xd5\x05\n\x06Hybrid\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12\x12\n\x06vector\x18\x03 \x03(\x02\x42\x02\x18\x01\x12\x11\n\x05\x61lpha\x18\x04 \x01(\x02\x42\x02\x18\x01\x12\x33\n\x0b\x66usion_type\x18\x05 \x01(\x0e\x32\x1e.weaviate.v1.Hybrid.FusionType\x12\x18\n\x0cvector_bytes\x18\x06 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x07 \x03(\tB\x02\x18\x01\x12.\n\tnear_text\x18\x08 \x01(\x0b\x32\x1b.weaviate.v1.NearTextSearch\x12,\n\x0bnear_vector\x18\t \x01(\x0b\x32\x17.weaviate.v1.NearVector\x12%\n\x07targets\x18\n \x01(\x0b\x32\x14.weaviate.v1.Targets\x12\x45\n\x14\x62m25_search_operator\x18\x0b \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x01\x88\x01\x01\x12\x18\n\x0b\x61lpha_param\x18\x0c \x01(\x02H\x02\x88\x01\x01\x12\x17\n\x0fuse_alpha_param\x18\r \x01(\x08\x12.\n\tselection\x18\x0e \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x03\x88\x01\x01\x12\x19\n\x0fvector_distance\x18\x14 \x01(\x02H\x00\x12%\n\x07vectors\x18\x15 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"a\n\nFusionType\x12\x1b\n\x17\x46USION_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x46USION_TYPE_RANKED\x10\x01\x12\x1e\n\x1a\x46USION_TYPE_RELATIVE_SCORE\x10\x02\x42\x0b\n\tthresholdB\x17\n\x15_bm25_search_operatorB\x0e\n\x0c_alpha_paramB\x0c\n\n_selection\"\xeb\x03\n\nNearVector\x12\x12\n\x06vector\x18\x01 \x03(\x02\x42\x02\x18\x01\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x18\n\x0cvector_bytes\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x05 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x06 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12K\n\x11vector_per_target\x18\x07 \x03(\x0b\x32,.weaviate.v1.NearVector.VectorPerTargetEntryB\x02\x18\x01\x12\x38\n\x12vector_for_targets\x18\x08 \x03(\x0b\x32\x1c.weaviate.v1.VectorForTarget\x12%\n\x07vectors\x18\t \x03(\x0b\x32\x14.weaviate.v1.Vectors\x12.\n\tselection\x18\n \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x1a\x36\n\x14VectorPerTargetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe3\x01\n\nNearObject\x12\n\n\x02id\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xae\x03\n\x0eNearTextSearch\x12\r\n\x05query\x18\x01 \x03(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x36\n\x07move_to\x18\x04 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x02\x88\x01\x01\x12\x38\n\tmove_away\x18\x05 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x03\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x06 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x07 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x08 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x04\x88\x01\x01\x1a\x36\n\x04Move\x12\r\n\x05\x66orce\x18\x01 \x01(\x02\x12\x10\n\x08\x63oncepts\x18\x02 \x03(\t\x12\r\n\x05uuids\x18\x03 \x03(\tB\x0c\n\n_certaintyB\x0b\n\t_distanceB\n\n\x08_move_toB\x0c\n\n_move_awayB\x0c\n\n_selection\"\xeb\x01\n\x0fNearImageSearch\x12\r\n\x05image\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearAudioSearch\x12\r\n\x05\x61udio\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearVideoSearch\x12\r\n\x05video\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearDepthSearch\x12\r\n\x05\x64\x65pth\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xef\x01\n\x11NearThermalSearch\x12\x0f\n\x07thermal\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe7\x01\n\rNearIMUSearch\x12\x0b\n\x03imu\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\x7f\n\x04\x42M25\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12@\n\x0fsearch_operator\x18\x03 \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x00\x88\x01\x01\x42\x12\n\x10_search_operator*\xee\x01\n\x11\x43ombinationMethod\x12\"\n\x1e\x43OMBINATION_METHOD_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_SUM\x10\x01\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_MIN\x10\x02\x12#\n\x1f\x43OMBINATION_METHOD_TYPE_AVERAGE\x10\x03\x12*\n&COMBINATION_METHOD_TYPE_RELATIVE_SCORE\x10\x04\x12\"\n\x1e\x43OMBINATION_METHOD_TYPE_MANUAL\x10\x05\x42t\n#io.weaviate.client.grpc.protocol.v1B\x17WeaviateProtoBaseSearchZ4github.com/weaviate/weaviate/grpc/generated;protocolb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14v1/base_search.proto\x12\x0bweaviate.v1\x1a\rv1/base.proto\"2\n\x10WeightsForTarget\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0e\n\x06weight\x18\x02 \x01(\x02\"\x98\x01\n\x07Targets\x12\x16\n\x0etarget_vectors\x18\x01 \x03(\t\x12\x33\n\x0b\x63ombination\x18\x02 \x01(\x0e\x32\x1e.weaviate.v1.CombinationMethod\x12:\n\x13weights_for_targets\x18\x04 \x03(\x0b\x32\x1d.weaviate.v1.WeightsForTargetJ\x04\x08\x03\x10\x04\"`\n\x0fVectorForTarget\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x0cvector_bytes\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12%\n\x07vectors\x18\x03 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"\x8a\x01\n\tSelection\x12)\n\x03mmr\x18\x01 \x01(\x0b\x32\x1a.weaviate.v1.Selection.MMRH\x00\x1a\x45\n\x03MMR\x12\x12\n\x05limit\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07\x62\x61lance\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\x08\n\x06_limitB\n\n\x08_balanceB\x0b\n\tselection\"\xf9\x01\n\x15SearchOperatorOptions\x12=\n\x08operator\x18\x01 \x01(\x0e\x32+.weaviate.v1.SearchOperatorOptions.Operator\x12$\n\x17minimum_or_tokens_match\x18\x02 \x01(\x05H\x00\x88\x01\x01\"_\n\x08Operator\x12\x18\n\x14OPERATOR_UNSPECIFIED\x10\x00\x12\x0f\n\x0bOPERATOR_OR\x10\x01\x12\x10\n\x0cOPERATOR_AND\x10\x02\x12\x16\n\x12OPERATOR_AND_CROSS\x10\x03\x42\x1a\n\x18_minimum_or_tokens_match\"\xd5\x05\n\x06Hybrid\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12\x12\n\x06vector\x18\x03 \x03(\x02\x42\x02\x18\x01\x12\x11\n\x05\x61lpha\x18\x04 \x01(\x02\x42\x02\x18\x01\x12\x33\n\x0b\x66usion_type\x18\x05 \x01(\x0e\x32\x1e.weaviate.v1.Hybrid.FusionType\x12\x18\n\x0cvector_bytes\x18\x06 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x07 \x03(\tB\x02\x18\x01\x12.\n\tnear_text\x18\x08 \x01(\x0b\x32\x1b.weaviate.v1.NearTextSearch\x12,\n\x0bnear_vector\x18\t \x01(\x0b\x32\x17.weaviate.v1.NearVector\x12%\n\x07targets\x18\n \x01(\x0b\x32\x14.weaviate.v1.Targets\x12\x45\n\x14\x62m25_search_operator\x18\x0b \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x01\x88\x01\x01\x12\x18\n\x0b\x61lpha_param\x18\x0c \x01(\x02H\x02\x88\x01\x01\x12\x17\n\x0fuse_alpha_param\x18\r \x01(\x08\x12.\n\tselection\x18\x0e \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x03\x88\x01\x01\x12\x19\n\x0fvector_distance\x18\x14 \x01(\x02H\x00\x12%\n\x07vectors\x18\x15 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"a\n\nFusionType\x12\x1b\n\x17\x46USION_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x46USION_TYPE_RANKED\x10\x01\x12\x1e\n\x1a\x46USION_TYPE_RELATIVE_SCORE\x10\x02\x42\x0b\n\tthresholdB\x17\n\x15_bm25_search_operatorB\x0e\n\x0c_alpha_paramB\x0c\n\n_selection\"\xeb\x03\n\nNearVector\x12\x12\n\x06vector\x18\x01 \x03(\x02\x42\x02\x18\x01\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x18\n\x0cvector_bytes\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x05 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x06 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12K\n\x11vector_per_target\x18\x07 \x03(\x0b\x32,.weaviate.v1.NearVector.VectorPerTargetEntryB\x02\x18\x01\x12\x38\n\x12vector_for_targets\x18\x08 \x03(\x0b\x32\x1c.weaviate.v1.VectorForTarget\x12%\n\x07vectors\x18\t \x03(\x0b\x32\x14.weaviate.v1.Vectors\x12.\n\tselection\x18\n \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x1a\x36\n\x14VectorPerTargetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe3\x01\n\nNearObject\x12\n\n\x02id\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xae\x03\n\x0eNearTextSearch\x12\r\n\x05query\x18\x01 \x03(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x36\n\x07move_to\x18\x04 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x02\x88\x01\x01\x12\x38\n\tmove_away\x18\x05 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x03\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x06 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x07 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x08 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x04\x88\x01\x01\x1a\x36\n\x04Move\x12\r\n\x05\x66orce\x18\x01 \x01(\x02\x12\x10\n\x08\x63oncepts\x18\x02 \x03(\t\x12\r\n\x05uuids\x18\x03 \x03(\tB\x0c\n\n_certaintyB\x0b\n\t_distanceB\n\n\x08_move_toB\x0c\n\n_move_awayB\x0c\n\n_selection\"\xeb\x01\n\x0fNearImageSearch\x12\r\n\x05image\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearAudioSearch\x12\r\n\x05\x61udio\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearVideoSearch\x12\r\n\x05video\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearDepthSearch\x12\r\n\x05\x64\x65pth\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xef\x01\n\x11NearThermalSearch\x12\x0f\n\x07thermal\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe7\x01\n\rNearIMUSearch\x12\x0b\n\x03imu\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\x7f\n\x04\x42M25\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12@\n\x0fsearch_operator\x18\x03 \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x00\x88\x01\x01\x42\x12\n\x10_search_operator*\xee\x01\n\x11\x43ombinationMethod\x12\"\n\x1e\x43OMBINATION_METHOD_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_SUM\x10\x01\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_MIN\x10\x02\x12#\n\x1f\x43OMBINATION_METHOD_TYPE_AVERAGE\x10\x03\x12*\n&COMBINATION_METHOD_TYPE_RELATIVE_SCORE\x10\x04\x12\"\n\x1e\x43OMBINATION_METHOD_TYPE_MANUAL\x10\x05\x42t\n#io.weaviate.client.grpc.protocol.v1B\x17WeaviateProtoBaseSearchZ4github.com/weaviate/weaviate/grpc/generated;protocolb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -59,8 +59,8 @@ _globals['_NEARTHERMALSEARCH'].fields_by_name['target_vectors']._serialized_options = b'\030\001' _globals['_NEARIMUSEARCH'].fields_by_name['target_vectors']._loaded_options = None _globals['_NEARIMUSEARCH'].fields_by_name['target_vectors']._serialized_options = b'\030\001' - _globals['_COMBINATIONMETHOD']._serialized_start=4169 - _globals['_COMBINATIONMETHOD']._serialized_end=4407 + _globals['_COMBINATIONMETHOD']._serialized_start=4193 + _globals['_COMBINATIONMETHOD']._serialized_end=4431 _globals['_WEIGHTSFORTARGET']._serialized_start=52 _globals['_WEIGHTSFORTARGET']._serialized_end=102 _globals['_TARGETS']._serialized_start=105 @@ -72,35 +72,35 @@ _globals['_SELECTION_MMR']._serialized_start=414 _globals['_SELECTION_MMR']._serialized_end=483 _globals['_SEARCHOPERATOROPTIONS']._serialized_start=499 - _globals['_SEARCHOPERATOROPTIONS']._serialized_end=724 + _globals['_SEARCHOPERATOROPTIONS']._serialized_end=748 _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_start=625 - _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_end=696 - _globals['_HYBRID']._serialized_start=727 - _globals['_HYBRID']._serialized_end=1452 - _globals['_HYBRID_FUSIONTYPE']._serialized_start=1287 - _globals['_HYBRID_FUSIONTYPE']._serialized_end=1384 - _globals['_NEARVECTOR']._serialized_start=1455 - _globals['_NEARVECTOR']._serialized_end=1946 - _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_start=1851 - _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_end=1905 - _globals['_NEAROBJECT']._serialized_start=1949 - _globals['_NEAROBJECT']._serialized_end=2176 - _globals['_NEARTEXTSEARCH']._serialized_start=2179 - _globals['_NEARTEXTSEARCH']._serialized_end=2609 - _globals['_NEARTEXTSEARCH_MOVE']._serialized_start=2488 - _globals['_NEARTEXTSEARCH_MOVE']._serialized_end=2542 - _globals['_NEARIMAGESEARCH']._serialized_start=2612 - _globals['_NEARIMAGESEARCH']._serialized_end=2847 - _globals['_NEARAUDIOSEARCH']._serialized_start=2850 - _globals['_NEARAUDIOSEARCH']._serialized_end=3085 - _globals['_NEARVIDEOSEARCH']._serialized_start=3088 - _globals['_NEARVIDEOSEARCH']._serialized_end=3323 - _globals['_NEARDEPTHSEARCH']._serialized_start=3326 - _globals['_NEARDEPTHSEARCH']._serialized_end=3561 - _globals['_NEARTHERMALSEARCH']._serialized_start=3564 - _globals['_NEARTHERMALSEARCH']._serialized_end=3803 - _globals['_NEARIMUSEARCH']._serialized_start=3806 - _globals['_NEARIMUSEARCH']._serialized_end=4037 - _globals['_BM25']._serialized_start=4039 - _globals['_BM25']._serialized_end=4166 + _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_end=720 + _globals['_HYBRID']._serialized_start=751 + _globals['_HYBRID']._serialized_end=1476 + _globals['_HYBRID_FUSIONTYPE']._serialized_start=1311 + _globals['_HYBRID_FUSIONTYPE']._serialized_end=1408 + _globals['_NEARVECTOR']._serialized_start=1479 + _globals['_NEARVECTOR']._serialized_end=1970 + _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_start=1875 + _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_end=1929 + _globals['_NEAROBJECT']._serialized_start=1973 + _globals['_NEAROBJECT']._serialized_end=2200 + _globals['_NEARTEXTSEARCH']._serialized_start=2203 + _globals['_NEARTEXTSEARCH']._serialized_end=2633 + _globals['_NEARTEXTSEARCH_MOVE']._serialized_start=2512 + _globals['_NEARTEXTSEARCH_MOVE']._serialized_end=2566 + _globals['_NEARIMAGESEARCH']._serialized_start=2636 + _globals['_NEARIMAGESEARCH']._serialized_end=2871 + _globals['_NEARAUDIOSEARCH']._serialized_start=2874 + _globals['_NEARAUDIOSEARCH']._serialized_end=3109 + _globals['_NEARVIDEOSEARCH']._serialized_start=3112 + _globals['_NEARVIDEOSEARCH']._serialized_end=3347 + _globals['_NEARDEPTHSEARCH']._serialized_start=3350 + _globals['_NEARDEPTHSEARCH']._serialized_end=3585 + _globals['_NEARTHERMALSEARCH']._serialized_start=3588 + _globals['_NEARTHERMALSEARCH']._serialized_end=3827 + _globals['_NEARIMUSEARCH']._serialized_start=3830 + _globals['_NEARIMUSEARCH']._serialized_end=4061 + _globals['_BM25']._serialized_start=4063 + _globals['_BM25']._serialized_end=4190 # @@protoc_insertion_point(module_scope) diff --git a/weaviate/proto/v1/v5261/v1/base_search_pb2.pyi b/weaviate/proto/v1/v5261/v1/base_search_pb2.pyi index 5c8c05546..f5211b433 100644 --- a/weaviate/proto/v1/v5261/v1/base_search_pb2.pyi +++ b/weaviate/proto/v1/v5261/v1/base_search_pb2.pyi @@ -70,9 +70,11 @@ class SearchOperatorOptions(_message.Message): OPERATOR_UNSPECIFIED: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_OR: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_AND: _ClassVar[SearchOperatorOptions.Operator] + OPERATOR_AND_CROSS: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_UNSPECIFIED: SearchOperatorOptions.Operator OPERATOR_OR: SearchOperatorOptions.Operator OPERATOR_AND: SearchOperatorOptions.Operator + OPERATOR_AND_CROSS: SearchOperatorOptions.Operator OPERATOR_FIELD_NUMBER: _ClassVar[int] MINIMUM_OR_TOKENS_MATCH_FIELD_NUMBER: _ClassVar[int] operator: SearchOperatorOptions.Operator diff --git a/weaviate/proto/v1/v6300/v1/base_search_pb2.py b/weaviate/proto/v1/v6300/v1/base_search_pb2.py index c46a0d974..006f340e8 100644 --- a/weaviate/proto/v1/v6300/v1/base_search_pb2.py +++ b/weaviate/proto/v1/v6300/v1/base_search_pb2.py @@ -25,7 +25,7 @@ from weaviate.proto.v1.v6300.v1 import base_pb2 as v1_dot_base__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14v1/base_search.proto\x12\x0bweaviate.v1\x1a\rv1/base.proto\"2\n\x10WeightsForTarget\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0e\n\x06weight\x18\x02 \x01(\x02\"\x98\x01\n\x07Targets\x12\x16\n\x0etarget_vectors\x18\x01 \x03(\t\x12\x33\n\x0b\x63ombination\x18\x02 \x01(\x0e\x32\x1e.weaviate.v1.CombinationMethod\x12:\n\x13weights_for_targets\x18\x04 \x03(\x0b\x32\x1d.weaviate.v1.WeightsForTargetJ\x04\x08\x03\x10\x04\"`\n\x0fVectorForTarget\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x0cvector_bytes\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12%\n\x07vectors\x18\x03 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"\x8a\x01\n\tSelection\x12)\n\x03mmr\x18\x01 \x01(\x0b\x32\x1a.weaviate.v1.Selection.MMRH\x00\x1a\x45\n\x03MMR\x12\x12\n\x05limit\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07\x62\x61lance\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\x08\n\x06_limitB\n\n\x08_balanceB\x0b\n\tselection\"\xe1\x01\n\x15SearchOperatorOptions\x12=\n\x08operator\x18\x01 \x01(\x0e\x32+.weaviate.v1.SearchOperatorOptions.Operator\x12$\n\x17minimum_or_tokens_match\x18\x02 \x01(\x05H\x00\x88\x01\x01\"G\n\x08Operator\x12\x18\n\x14OPERATOR_UNSPECIFIED\x10\x00\x12\x0f\n\x0bOPERATOR_OR\x10\x01\x12\x10\n\x0cOPERATOR_AND\x10\x02\x42\x1a\n\x18_minimum_or_tokens_match\"\xd5\x05\n\x06Hybrid\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12\x12\n\x06vector\x18\x03 \x03(\x02\x42\x02\x18\x01\x12\x11\n\x05\x61lpha\x18\x04 \x01(\x02\x42\x02\x18\x01\x12\x33\n\x0b\x66usion_type\x18\x05 \x01(\x0e\x32\x1e.weaviate.v1.Hybrid.FusionType\x12\x18\n\x0cvector_bytes\x18\x06 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x07 \x03(\tB\x02\x18\x01\x12.\n\tnear_text\x18\x08 \x01(\x0b\x32\x1b.weaviate.v1.NearTextSearch\x12,\n\x0bnear_vector\x18\t \x01(\x0b\x32\x17.weaviate.v1.NearVector\x12%\n\x07targets\x18\n \x01(\x0b\x32\x14.weaviate.v1.Targets\x12\x45\n\x14\x62m25_search_operator\x18\x0b \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x01\x88\x01\x01\x12\x18\n\x0b\x61lpha_param\x18\x0c \x01(\x02H\x02\x88\x01\x01\x12\x17\n\x0fuse_alpha_param\x18\r \x01(\x08\x12.\n\tselection\x18\x0e \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x03\x88\x01\x01\x12\x19\n\x0fvector_distance\x18\x14 \x01(\x02H\x00\x12%\n\x07vectors\x18\x15 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"a\n\nFusionType\x12\x1b\n\x17\x46USION_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x46USION_TYPE_RANKED\x10\x01\x12\x1e\n\x1a\x46USION_TYPE_RELATIVE_SCORE\x10\x02\x42\x0b\n\tthresholdB\x17\n\x15_bm25_search_operatorB\x0e\n\x0c_alpha_paramB\x0c\n\n_selection\"\xeb\x03\n\nNearVector\x12\x12\n\x06vector\x18\x01 \x03(\x02\x42\x02\x18\x01\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x18\n\x0cvector_bytes\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x05 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x06 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12K\n\x11vector_per_target\x18\x07 \x03(\x0b\x32,.weaviate.v1.NearVector.VectorPerTargetEntryB\x02\x18\x01\x12\x38\n\x12vector_for_targets\x18\x08 \x03(\x0b\x32\x1c.weaviate.v1.VectorForTarget\x12%\n\x07vectors\x18\t \x03(\x0b\x32\x14.weaviate.v1.Vectors\x12.\n\tselection\x18\n \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x1a\x36\n\x14VectorPerTargetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe3\x01\n\nNearObject\x12\n\n\x02id\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xae\x03\n\x0eNearTextSearch\x12\r\n\x05query\x18\x01 \x03(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x36\n\x07move_to\x18\x04 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x02\x88\x01\x01\x12\x38\n\tmove_away\x18\x05 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x03\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x06 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x07 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x08 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x04\x88\x01\x01\x1a\x36\n\x04Move\x12\r\n\x05\x66orce\x18\x01 \x01(\x02\x12\x10\n\x08\x63oncepts\x18\x02 \x03(\t\x12\r\n\x05uuids\x18\x03 \x03(\tB\x0c\n\n_certaintyB\x0b\n\t_distanceB\n\n\x08_move_toB\x0c\n\n_move_awayB\x0c\n\n_selection\"\xeb\x01\n\x0fNearImageSearch\x12\r\n\x05image\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearAudioSearch\x12\r\n\x05\x61udio\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearVideoSearch\x12\r\n\x05video\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearDepthSearch\x12\r\n\x05\x64\x65pth\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xef\x01\n\x11NearThermalSearch\x12\x0f\n\x07thermal\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe7\x01\n\rNearIMUSearch\x12\x0b\n\x03imu\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\x7f\n\x04\x42M25\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12@\n\x0fsearch_operator\x18\x03 \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x00\x88\x01\x01\x42\x12\n\x10_search_operator*\xee\x01\n\x11\x43ombinationMethod\x12\"\n\x1e\x43OMBINATION_METHOD_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_SUM\x10\x01\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_MIN\x10\x02\x12#\n\x1f\x43OMBINATION_METHOD_TYPE_AVERAGE\x10\x03\x12*\n&COMBINATION_METHOD_TYPE_RELATIVE_SCORE\x10\x04\x12\"\n\x1e\x43OMBINATION_METHOD_TYPE_MANUAL\x10\x05\x42t\n#io.weaviate.client.grpc.protocol.v1B\x17WeaviateProtoBaseSearchZ4github.com/weaviate/weaviate/grpc/generated;protocolb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14v1/base_search.proto\x12\x0bweaviate.v1\x1a\rv1/base.proto\"2\n\x10WeightsForTarget\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0e\n\x06weight\x18\x02 \x01(\x02\"\x98\x01\n\x07Targets\x12\x16\n\x0etarget_vectors\x18\x01 \x03(\t\x12\x33\n\x0b\x63ombination\x18\x02 \x01(\x0e\x32\x1e.weaviate.v1.CombinationMethod\x12:\n\x13weights_for_targets\x18\x04 \x03(\x0b\x32\x1d.weaviate.v1.WeightsForTargetJ\x04\x08\x03\x10\x04\"`\n\x0fVectorForTarget\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x0cvector_bytes\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12%\n\x07vectors\x18\x03 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"\x8a\x01\n\tSelection\x12)\n\x03mmr\x18\x01 \x01(\x0b\x32\x1a.weaviate.v1.Selection.MMRH\x00\x1a\x45\n\x03MMR\x12\x12\n\x05limit\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07\x62\x61lance\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\x08\n\x06_limitB\n\n\x08_balanceB\x0b\n\tselection\"\xf9\x01\n\x15SearchOperatorOptions\x12=\n\x08operator\x18\x01 \x01(\x0e\x32+.weaviate.v1.SearchOperatorOptions.Operator\x12$\n\x17minimum_or_tokens_match\x18\x02 \x01(\x05H\x00\x88\x01\x01\"_\n\x08Operator\x12\x18\n\x14OPERATOR_UNSPECIFIED\x10\x00\x12\x0f\n\x0bOPERATOR_OR\x10\x01\x12\x10\n\x0cOPERATOR_AND\x10\x02\x12\x16\n\x12OPERATOR_AND_CROSS\x10\x03\x42\x1a\n\x18_minimum_or_tokens_match\"\xd5\x05\n\x06Hybrid\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12\x12\n\x06vector\x18\x03 \x03(\x02\x42\x02\x18\x01\x12\x11\n\x05\x61lpha\x18\x04 \x01(\x02\x42\x02\x18\x01\x12\x33\n\x0b\x66usion_type\x18\x05 \x01(\x0e\x32\x1e.weaviate.v1.Hybrid.FusionType\x12\x18\n\x0cvector_bytes\x18\x06 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x07 \x03(\tB\x02\x18\x01\x12.\n\tnear_text\x18\x08 \x01(\x0b\x32\x1b.weaviate.v1.NearTextSearch\x12,\n\x0bnear_vector\x18\t \x01(\x0b\x32\x17.weaviate.v1.NearVector\x12%\n\x07targets\x18\n \x01(\x0b\x32\x14.weaviate.v1.Targets\x12\x45\n\x14\x62m25_search_operator\x18\x0b \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x01\x88\x01\x01\x12\x18\n\x0b\x61lpha_param\x18\x0c \x01(\x02H\x02\x88\x01\x01\x12\x17\n\x0fuse_alpha_param\x18\r \x01(\x08\x12.\n\tselection\x18\x0e \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x03\x88\x01\x01\x12\x19\n\x0fvector_distance\x18\x14 \x01(\x02H\x00\x12%\n\x07vectors\x18\x15 \x03(\x0b\x32\x14.weaviate.v1.Vectors\"a\n\nFusionType\x12\x1b\n\x17\x46USION_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x46USION_TYPE_RANKED\x10\x01\x12\x1e\n\x1a\x46USION_TYPE_RELATIVE_SCORE\x10\x02\x42\x0b\n\tthresholdB\x17\n\x15_bm25_search_operatorB\x0e\n\x0c_alpha_paramB\x0c\n\n_selection\"\xeb\x03\n\nNearVector\x12\x12\n\x06vector\x18\x01 \x03(\x02\x42\x02\x18\x01\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x18\n\x0cvector_bytes\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12\x1a\n\x0etarget_vectors\x18\x05 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x06 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12K\n\x11vector_per_target\x18\x07 \x03(\x0b\x32,.weaviate.v1.NearVector.VectorPerTargetEntryB\x02\x18\x01\x12\x38\n\x12vector_for_targets\x18\x08 \x03(\x0b\x32\x1c.weaviate.v1.VectorForTarget\x12%\n\x07vectors\x18\t \x03(\x0b\x32\x14.weaviate.v1.Vectors\x12.\n\tselection\x18\n \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x1a\x36\n\x14VectorPerTargetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe3\x01\n\nNearObject\x12\n\n\x02id\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xae\x03\n\x0eNearTextSearch\x12\r\n\x05query\x18\x01 \x03(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x36\n\x07move_to\x18\x04 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x02\x88\x01\x01\x12\x38\n\tmove_away\x18\x05 \x01(\x0b\x32 .weaviate.v1.NearTextSearch.MoveH\x03\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x06 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x07 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x08 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x04\x88\x01\x01\x1a\x36\n\x04Move\x12\r\n\x05\x66orce\x18\x01 \x01(\x02\x12\x10\n\x08\x63oncepts\x18\x02 \x03(\t\x12\r\n\x05uuids\x18\x03 \x03(\tB\x0c\n\n_certaintyB\x0b\n\t_distanceB\n\n\x08_move_toB\x0c\n\n_move_awayB\x0c\n\n_selection\"\xeb\x01\n\x0fNearImageSearch\x12\r\n\x05image\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearAudioSearch\x12\r\n\x05\x61udio\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearVideoSearch\x12\r\n\x05video\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xeb\x01\n\x0fNearDepthSearch\x12\r\n\x05\x64\x65pth\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xef\x01\n\x11NearThermalSearch\x12\x0f\n\x07thermal\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\xe7\x01\n\rNearIMUSearch\x12\x0b\n\x03imu\x18\x01 \x01(\t\x12\x16\n\tcertainty\x18\x02 \x01(\x01H\x00\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x03 \x01(\x01H\x01\x88\x01\x01\x12\x1a\n\x0etarget_vectors\x18\x04 \x03(\tB\x02\x18\x01\x12%\n\x07targets\x18\x05 \x01(\x0b\x32\x14.weaviate.v1.Targets\x12.\n\tselection\x18\x06 \x01(\x0b\x32\x16.weaviate.v1.SelectionH\x02\x88\x01\x01\x42\x0c\n\n_certaintyB\x0b\n\t_distanceB\x0c\n\n_selection\"\x7f\n\x04\x42M25\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\nproperties\x18\x02 \x03(\t\x12@\n\x0fsearch_operator\x18\x03 \x01(\x0b\x32\".weaviate.v1.SearchOperatorOptionsH\x00\x88\x01\x01\x42\x12\n\x10_search_operator*\xee\x01\n\x11\x43ombinationMethod\x12\"\n\x1e\x43OMBINATION_METHOD_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_SUM\x10\x01\x12\x1f\n\x1b\x43OMBINATION_METHOD_TYPE_MIN\x10\x02\x12#\n\x1f\x43OMBINATION_METHOD_TYPE_AVERAGE\x10\x03\x12*\n&COMBINATION_METHOD_TYPE_RELATIVE_SCORE\x10\x04\x12\"\n\x1e\x43OMBINATION_METHOD_TYPE_MANUAL\x10\x05\x42t\n#io.weaviate.client.grpc.protocol.v1B\x17WeaviateProtoBaseSearchZ4github.com/weaviate/weaviate/grpc/generated;protocolb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -69,8 +69,8 @@ _globals['_NEARTHERMALSEARCH'].fields_by_name['target_vectors']._serialized_options = b'\030\001' _globals['_NEARIMUSEARCH'].fields_by_name['target_vectors']._loaded_options = None _globals['_NEARIMUSEARCH'].fields_by_name['target_vectors']._serialized_options = b'\030\001' - _globals['_COMBINATIONMETHOD']._serialized_start=4169 - _globals['_COMBINATIONMETHOD']._serialized_end=4407 + _globals['_COMBINATIONMETHOD']._serialized_start=4193 + _globals['_COMBINATIONMETHOD']._serialized_end=4431 _globals['_WEIGHTSFORTARGET']._serialized_start=52 _globals['_WEIGHTSFORTARGET']._serialized_end=102 _globals['_TARGETS']._serialized_start=105 @@ -82,35 +82,35 @@ _globals['_SELECTION_MMR']._serialized_start=414 _globals['_SELECTION_MMR']._serialized_end=483 _globals['_SEARCHOPERATOROPTIONS']._serialized_start=499 - _globals['_SEARCHOPERATOROPTIONS']._serialized_end=724 + _globals['_SEARCHOPERATOROPTIONS']._serialized_end=748 _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_start=625 - _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_end=696 - _globals['_HYBRID']._serialized_start=727 - _globals['_HYBRID']._serialized_end=1452 - _globals['_HYBRID_FUSIONTYPE']._serialized_start=1287 - _globals['_HYBRID_FUSIONTYPE']._serialized_end=1384 - _globals['_NEARVECTOR']._serialized_start=1455 - _globals['_NEARVECTOR']._serialized_end=1946 - _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_start=1851 - _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_end=1905 - _globals['_NEAROBJECT']._serialized_start=1949 - _globals['_NEAROBJECT']._serialized_end=2176 - _globals['_NEARTEXTSEARCH']._serialized_start=2179 - _globals['_NEARTEXTSEARCH']._serialized_end=2609 - _globals['_NEARTEXTSEARCH_MOVE']._serialized_start=2488 - _globals['_NEARTEXTSEARCH_MOVE']._serialized_end=2542 - _globals['_NEARIMAGESEARCH']._serialized_start=2612 - _globals['_NEARIMAGESEARCH']._serialized_end=2847 - _globals['_NEARAUDIOSEARCH']._serialized_start=2850 - _globals['_NEARAUDIOSEARCH']._serialized_end=3085 - _globals['_NEARVIDEOSEARCH']._serialized_start=3088 - _globals['_NEARVIDEOSEARCH']._serialized_end=3323 - _globals['_NEARDEPTHSEARCH']._serialized_start=3326 - _globals['_NEARDEPTHSEARCH']._serialized_end=3561 - _globals['_NEARTHERMALSEARCH']._serialized_start=3564 - _globals['_NEARTHERMALSEARCH']._serialized_end=3803 - _globals['_NEARIMUSEARCH']._serialized_start=3806 - _globals['_NEARIMUSEARCH']._serialized_end=4037 - _globals['_BM25']._serialized_start=4039 - _globals['_BM25']._serialized_end=4166 + _globals['_SEARCHOPERATOROPTIONS_OPERATOR']._serialized_end=720 + _globals['_HYBRID']._serialized_start=751 + _globals['_HYBRID']._serialized_end=1476 + _globals['_HYBRID_FUSIONTYPE']._serialized_start=1311 + _globals['_HYBRID_FUSIONTYPE']._serialized_end=1408 + _globals['_NEARVECTOR']._serialized_start=1479 + _globals['_NEARVECTOR']._serialized_end=1970 + _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_start=1875 + _globals['_NEARVECTOR_VECTORPERTARGETENTRY']._serialized_end=1929 + _globals['_NEAROBJECT']._serialized_start=1973 + _globals['_NEAROBJECT']._serialized_end=2200 + _globals['_NEARTEXTSEARCH']._serialized_start=2203 + _globals['_NEARTEXTSEARCH']._serialized_end=2633 + _globals['_NEARTEXTSEARCH_MOVE']._serialized_start=2512 + _globals['_NEARTEXTSEARCH_MOVE']._serialized_end=2566 + _globals['_NEARIMAGESEARCH']._serialized_start=2636 + _globals['_NEARIMAGESEARCH']._serialized_end=2871 + _globals['_NEARAUDIOSEARCH']._serialized_start=2874 + _globals['_NEARAUDIOSEARCH']._serialized_end=3109 + _globals['_NEARVIDEOSEARCH']._serialized_start=3112 + _globals['_NEARVIDEOSEARCH']._serialized_end=3347 + _globals['_NEARDEPTHSEARCH']._serialized_start=3350 + _globals['_NEARDEPTHSEARCH']._serialized_end=3585 + _globals['_NEARTHERMALSEARCH']._serialized_start=3588 + _globals['_NEARTHERMALSEARCH']._serialized_end=3827 + _globals['_NEARIMUSEARCH']._serialized_start=3830 + _globals['_NEARIMUSEARCH']._serialized_end=4061 + _globals['_BM25']._serialized_start=4063 + _globals['_BM25']._serialized_end=4190 # @@protoc_insertion_point(module_scope) diff --git a/weaviate/proto/v1/v6300/v1/base_search_pb2.pyi b/weaviate/proto/v1/v6300/v1/base_search_pb2.pyi index d96fe4c22..07c6f33d2 100644 --- a/weaviate/proto/v1/v6300/v1/base_search_pb2.pyi +++ b/weaviate/proto/v1/v6300/v1/base_search_pb2.pyi @@ -71,9 +71,11 @@ class SearchOperatorOptions(_message.Message): OPERATOR_UNSPECIFIED: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_OR: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_AND: _ClassVar[SearchOperatorOptions.Operator] + OPERATOR_AND_CROSS: _ClassVar[SearchOperatorOptions.Operator] OPERATOR_UNSPECIFIED: SearchOperatorOptions.Operator OPERATOR_OR: SearchOperatorOptions.Operator OPERATOR_AND: SearchOperatorOptions.Operator + OPERATOR_AND_CROSS: SearchOperatorOptions.Operator OPERATOR_FIELD_NUMBER: _ClassVar[int] MINIMUM_OR_TOKENS_MATCH_FIELD_NUMBER: _ClassVar[int] operator: SearchOperatorOptions.Operator diff --git a/weaviate/util.py b/weaviate/util.py index a5b35e6aa..f20ef3ad4 100644 --- a/weaviate/util.py +++ b/weaviate/util.py @@ -607,6 +607,18 @@ def from_string(cls, version: str) -> "_ServerVersion": f"Unable to parse a version from the input string: {initial}. Is it in the format '(v)x.y.z' (e.g. 'v1.18.2' or '1.18.0')?" ) + def is_at_least_any(self, *minimums: Tuple[int, int, int]) -> bool: + """Check a feature that was backported to several release branches. + + Each entry is the first version on its own minor branch to carry the feature, given in + ascending order. A server is supported if it is at least the minimum of the newest listed + branch that is not newer than itself. + """ + for major, minor, patch in reversed(minimums): + if (self.major, self.minor) >= (major, minor): + return self >= _ServerVersion(major, minor, patch) + return False + def check_is_at_least_1_25_0(self, feature: str) -> None: if not self >= _ServerVersion(1, 25, 0): raise WeaviateUnsupportedFeatureError(feature, str(self), "1.25.0")