Skip to content
9 changes: 3 additions & 6 deletions docarray/array/storage/annlite/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class AnnliteConfig:
ef_construction: Optional[int] = None
ef_search: Optional[int] = None
max_connection: Optional[int] = None
columns: Optional[List[Tuple[str, str]]] = None
columns: Optional[Union[List[Tuple[str, str]], Dict[str, str]]] = None


class BackendMixin(BaseBackendMixin):
Expand All @@ -53,11 +53,8 @@ def _map_embedding(self, embedding: 'ArrayType') -> 'ArrayType':

def _normalize_columns(self, columns):
columns = super()._normalize_columns(columns)
for i in range(len(columns)):
columns[i] = (
columns[i][0],
self._map_type(columns[i][1]),
)
for key in columns.keys():
columns[key] = self._map_type(columns[key])
return columns

def _ensure_unique_config(
Expand Down
14 changes: 11 additions & 3 deletions docarray/array/storage/base/backend.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from abc import ABC, abstractmethod
import warnings
from collections import namedtuple
from dataclasses import is_dataclass, asdict
from typing import Dict, Optional, TYPE_CHECKING
from typing import Dict, Optional, TYPE_CHECKING, Union, List, Tuple

if TYPE_CHECKING:
from docarray.typing import DocumentArraySourceType, ArrayType
Expand Down Expand Up @@ -77,7 +78,14 @@ def _map_embedding(self, embedding: 'ArrayType') -> 'ArrayType':
def _map_type(self, col_type: str) -> str:
return self.TYPE_MAP[col_type].type

def _normalize_columns(self, columns):
def _normalize_columns(
self, columns: Optional[Union[List[Tuple[str, str]], Dict[str, str]]]
) -> Dict[str, str]:
if columns is None:
return []
return {}
if isinstance(columns, list):
warnings.warn(
'Using "columns" as a List of Tuples will be deprecated soon. Please provide a Dictionary.'
)
columns = {col_desc[0]: col_desc[1] for col_desc in columns}
return columns
4 changes: 2 additions & 2 deletions docarray/array/storage/elastic/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class ElasticConfig:
batch_size: int = 64
ef_construction: Optional[int] = None
m: Optional[int] = None
columns: Optional[List[Tuple[str, str]]] = None
columns: Optional[Union[List[Tuple[str, str]], Dict[str, str]]] = None


_banned_indexname_chars = ['[', ' ', '"', '*', '\\', '<', '|', ',', '>', '/', '?', ']']
Expand Down Expand Up @@ -150,7 +150,7 @@ def _build_schema_from_elastic_config(self, elastic_config):
'index': True,
}

for col, coltype in self._config.columns:
for col, coltype in self._config.columns.items():
da_schema['mappings']['properties'][col] = {
'type': self._map_type(coltype),
'index': True,
Expand Down
4 changes: 3 additions & 1 deletion docarray/array/storage/elastic/getsetdel.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ class GetSetDelMixin(BaseGetSetDelMixin):
MAX_ES_RETURNED_DOCS = 10000

def _document_to_elastic(self, doc: 'Document') -> Dict:
extra_columns = {col: doc.tags.get(col) for col, _ in self._config.columns}
extra_columns = {
col: doc.tags.get(col) for col, _ in self._config.columns.items()
}
request = {
'_op_type': 'index',
'_id': doc.id,
Expand Down
2 changes: 1 addition & 1 deletion docarray/array/storage/qdrant/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class QdrantConfig:
ef_construct: Optional[int] = None
full_scan_threshold: Optional[int] = None
m: Optional[int] = None
columns: Optional[List[Tuple[str, str]]] = None
columns: Optional[Union[List[Tuple[str, str]], Dict[str, str]]] = None


class BackendMixin(BaseBackendMixin):
Expand Down
4 changes: 3 additions & 1 deletion docarray/array/storage/qdrant/getsetdel.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ def _qdrant_to_document(self, qdrant_record: dict) -> 'Document':
)

def _document_to_qdrant(self, doc: 'Document') -> 'PointStruct':
extra_columns = {col: doc.tags.get(col) for col, _ in self._config.columns}
extra_columns = {
col: doc.tags.get(col) for col, _ in self._config.columns.items()
}

return PointStruct(
id=self._map_id(doc.id),
Expand Down
4 changes: 2 additions & 2 deletions docarray/array/storage/redis/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class RedisConfig:
ef_runtime: int = field(default=10)
block_size: int = field(default=1048576)
initial_cap: Optional[int] = None
columns: Optional[List[Tuple[str, str]]] = None
columns: Optional[Union[List[Tuple[str, str]], Dict[str, str]]] = None


class BackendMixin(BaseBackendMixin):
Expand Down Expand Up @@ -146,7 +146,7 @@ def _build_schema_from_redis_config(self):
index_param['INITIAL_CAP'] = self._config.initial_cap
schema = [VectorField('embedding', self._config.method, index_param)]

for col, coltype in self._config.columns:
for col, coltype in self._config.columns.items():
schema.append(self._map_column(col, coltype))

return schema
Expand Down
2 changes: 1 addition & 1 deletion docarray/array/storage/redis/getsetdel.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def _del_doc_by_id(self, _id: str):
def _document_to_redis(self, doc: 'Document') -> Dict:
extra_columns = {}

for col, _ in self._config.columns:
for col, _ in self._config.columns.items():
tag = doc.tags.get(col)
if tag is not None:
extra_columns[col] = int(tag) if isinstance(tag, bool) else tag
Expand Down
12 changes: 2 additions & 10 deletions docarray/array/storage/sqlite/backend.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
import sqlite3
import warnings
from dataclasses import dataclass, field, asdict
from dataclasses import dataclass, field
from tempfile import NamedTemporaryFile
from typing import (
Iterable,
Dict,
Optional,
TYPE_CHECKING,
Union,
List,
Tuple,
)
from typing import Iterable, Dict, Optional, TYPE_CHECKING, Union

from docarray.array.storage.sqlite.helper import initialize_table
from docarray.array.storage.base.backend import BaseBackendMixin
Expand Down
9 changes: 4 additions & 5 deletions docarray/array/storage/weaviate/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class WeaviateConfig:
flat_search_cutoff: Optional[int] = None
cleanup_interval_seconds: Optional[int] = None
skip: Optional[bool] = None
columns: Optional[List[Tuple[str, str]]] = None
columns: Optional[Union[List[Tuple[str, str]], Dict[str, str]]] = None
distance: Optional[str] = None


Expand Down Expand Up @@ -215,7 +215,7 @@ def _get_schema_by_name(self, cls_name: str) -> Dict:
},
]
}
for col, coltype in self._config.columns:
for col, coltype in self._config.columns.items():
new_property = {
'dataType': [self._map_type(coltype)],
'name': col,
Expand Down Expand Up @@ -352,10 +352,9 @@ def _doc2weaviate_create_payload(self, value: 'Document'):
:param value: document to create a payload for
:return: the payload dictionary
"""
columns_dict = {key: val for [key, val] in self._config.columns}
extra_columns = {
col: self._map_column(value.tags.get(col), columns_dict[col])
for col, _ in self._config.columns
col: self._map_column(value.tags.get(col), col_type)
for col, col_type in self._config.columns.items()
}

return dict(
Expand Down
4 changes: 2 additions & 2 deletions docs/advanced/document-store/annlite.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ da = DocumentArray(
storage='annlite',
config={
'n_dim': n_dim,
'columns': [('price', 'float')],
'columns': {'price': 'float'},
},
)

Expand Down Expand Up @@ -125,7 +125,7 @@ metric = 'Euclidean'

da = DocumentArray(
storage='annlite',
config={'n_dim': n_dim, 'columns': [('price', 'float')], 'metric': metric},
config={'n_dim': n_dim, 'columns': {'price': 'float'}, 'metric': metric},
)

with da:
Expand Down
6 changes: 3 additions & 3 deletions docs/advanced/document-store/elasticsearch.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ n_dim = 3

da = DocumentArray(
storage='elasticsearch',
config={'n_dim': 3, 'columns': [('price', 'int')], 'distance': 'l2_norm'},
config={'n_dim': 3, 'columns': {'price': 'int'}, 'distance': 'l2_norm'},
)

with da:
Expand Down Expand Up @@ -172,7 +172,7 @@ n_dim = 3

da = DocumentArray(
storage='elasticsearch',
config={'n_dim': n_dim, 'columns': [('price', 'int')], 'distance': 'l2_norm'},
config={'n_dim': n_dim, 'columns': {'price': 'int'}, 'distance': 'l2_norm'},
)

with da:
Expand Down Expand Up @@ -248,7 +248,7 @@ da = DocumentArray(
storage='elasticsearch',
config={
'n_dim': n_dim,
'columns': [('price', 'float')],
'columns': {'price': 'float'},
},
)

Expand Down
6 changes: 3 additions & 3 deletions docs/advanced/document-store/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ metric = 'Euclidean'

da = DocumentArray(
storage='annlite',
config={'n_dim': n_dim, 'columns': [('price', 'float')], 'metric': metric},
config={'n_dim': n_dim, 'columns': {'price': 'float'}, 'metric': metric},
)

with da:
Expand Down Expand Up @@ -276,7 +276,7 @@ metric = 'Euclidean'

da = DocumentArray(
storage='annlite',
config={'n_dim': n_dim, 'columns': [('price', 'float')], 'metric': metric},
config={'n_dim': n_dim, 'columns': {'price': 'float'}, 'metric': metric},
)

with da:
Expand Down Expand Up @@ -317,7 +317,7 @@ metric = 'Euclidean'

da = DocumentArray(
storage='annlite',
config={'n_dim': n_dim, 'columns': [('price', 'float')], 'metric': metric},
config={'n_dim': n_dim, 'columns': {'price': 'float'}, 'metric': metric},
)

with da:
Expand Down
2 changes: 1 addition & 1 deletion docs/advanced/document-store/qdrant.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ distance = 'euclidean'

da = DocumentArray(
storage='qdrant',
config={'n_dim': n_dim, 'columns': [('price', 'float')], 'distance': distance},
config={'n_dim': n_dim, 'columns': {'price': 'float'}, 'distance': distance},
)

print(f'\nDocumentArray distance: {distance}')
Expand Down
4 changes: 2 additions & 2 deletions docs/advanced/document-store/redis.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ da2.summary()
│ ef_runtime 10 │
│ block_size 1048576 │
│ initial_cap None │
│ columns []
│ columns {}
│ │
╰─────────────────────────────────╯
```
Expand Down Expand Up @@ -146,7 +146,7 @@ da = DocumentArray(
storage='redis',
config={
'n_dim': n_dim,
'columns': [('price', 'int'), ('color', 'str')],
'columns': {'price': 'int', 'color': 'str'},
'flush': True,
'distance': 'L2',
},
Expand Down
6 changes: 3 additions & 3 deletions docs/advanced/document-store/weaviate.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ da = DocumentArray(
storage='weaviate',
config={
'n_dim': n_dim,
'columns': [('price', 'float')],
'columns': {'price': 'float'},
},
)

Expand Down Expand Up @@ -243,7 +243,7 @@ n_dim = 3

da = DocumentArray(
storage='weaviate',
config={'n_dim': n_dim, 'columns': [('price', 'int')], 'distance': 'l2-squared'},
config={'n_dim': n_dim, 'columns': {'price': 'int'}, 'distance': 'l2-squared'},
)

with da:
Expand Down Expand Up @@ -317,7 +317,7 @@ da = DocumentArray(
storage='weaviate',
config={
'n_dim': n_dim,
'columns': [('price', 'float')],
'columns': {'price': 'float'},
'distance': 'l2-squared',
"name": "Persisted",
"host": "localhost",
Expand Down
6 changes: 3 additions & 3 deletions docs/fundamentals/documentarray/subindex.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ da = DocumentArray(
│ ef_construction None │
│ ef_search None │
│ max_connection None │
│ columns []
│ columns {}
│ │
╰─────────────────────────────────────────╯
```
Expand Down Expand Up @@ -129,7 +129,7 @@ da = DocumentArray(
│ ef_construction None │
│ ef_search None │
│ max_connection None │
│ columns []
│ columns {}
│ │
╰─────────────────────────────────────────╯
```
Expand Down Expand Up @@ -231,4 +231,4 @@ top_level_matches = da[top_image_matches[:, 'parent_id']]
top_image_matches = da.find(query=np.random.rand(512), on='@c')
top_level_matches = da[top_image_matches[:, 'parent_id']]
```
````
````
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
'qdrant-client~=0.7.3',
],
'annlite': [
'annlite>=0.3.2',
'annlite>=0.3.10',
],
'weaviate': [
'weaviate-client~=3.3.0',
Expand Down Expand Up @@ -105,7 +105,7 @@
'jupyterlab',
'transformers>=4.16.2',
'weaviate-client~=3.3.0',
'annlite>=0.3.2',
'annlite>=0.3.10',
'elasticsearch>=8.2.0',
'redis>=4.3.0',
'jina',
Expand Down
Loading