SurrealStorage
class SurrealStorage(BaseVectorStorage):
An implementation of the BaseVectorStorage
using SurrealDB,
a scalable, distributed database with WebSocket support, for
efficient vector storage and similarity search.
SurrealDB official site and documentation can be found at:
SurrealDB <https://surrealdb.com>
_
Parameters:
- url (str): WebSocket URL for connecting to SurrealDB (default: “ws://localhost:8000/rpc”).
- table (str): Name of the table used for storing vectors (default: “vector_store”).
- vector_dim (int): Dimensionality of the stored vectors.
- distance (VectorDistance): Distance metric used for similarity comparisons (default: VectorDistance.COSINE).
- namespace (str): SurrealDB namespace to use (default: “default”). (default:
"default"
)
- database (str): SurrealDB database name (default: “demo”). (default:
"demo"
)
- user (str): Username for authentication (default: “root”). (default:
"root"
)
- password (str): Password for authentication (default: “root”). (default:
"root"
)
Note:
- SurrealDB supports flexible schema and powerful querying capabilities
via SQL-like syntax over WebSocket.
- This implementation manages connection setup and ensures the target
table exists.
- Suitable for applications requiring distributed vector storage and
search with real-time updates.
init
Initialize SurrealStorage with connection settings and ensure
the target table exists.
Parameters:
- url (str): WebSocket URL for connecting to SurrealDB. (default: :obj:
"ws://localhost:8000/rpc"
)
- table (str): Name of the table used for vector storage. (default: :obj:
"vector_store"
)
- vector_dim (int): Dimensionality of the stored vectors. (default: :obj:
786
)
- distance (VectorDistance): Distance metric for similarity searches. (default: :obj:
VectorDistance.COSINE
)
- namespace (str): SurrealDB namespace to use. (default: :obj:
"default"
)
- database (str): SurrealDB database name. (default: :obj:
"demo"
)
- user (str): Username for authentication. (default: :obj:
"root"
)
- password (str): Password for authentication. (default: :obj:
"root"
)
_table_exists
Returns:
bool: True if the table exists, False otherwise.
_get_table_info
def _get_table_info(self):
Returns:
dict: A dictionary with ‘dim’ and ‘count’ keys.
_create_table
Define and create the vector storage table with HNSW index.
_drop_table
Drop the vector storage table if it exists.
_check_and_create_table
def _check_and_create_table(self):
Check if the table exists and matches the expected vector dimension.
If not, create a new table.
_validate_and_convert_records
def _validate_and_convert_records(self, records: List[VectorRecord]):
Validate and convert VectorRecord instances into
SurrealDB-compatible dictionaries.
Parameters:
- records (List[VectorRecord]): List of vector records to insert.
Returns:
List[Dict]: Transformed list of dicts ready for insertion.
query
def query(self, query: VectorDBQuery, **kwargs: Any):
Perform a top-k similarity search using the configured distance metric.
Parameters:
- query (VectorDBQuery): Query containing the query vector and top_k value.
Returns:
List[VectorDBQueryResult]: Ranked list of matching records
with similarity scores.
add
def add(self, records: List[VectorRecord], **kwargs):
Insert validated vector records into the SurrealDB table.
Parameters:
- records (List[VectorRecord]): List of vector records to add.
delete
def delete(
self,
ids: Optional[List[str]] = None,
if_all: bool = False,
**kwargs
):
Delete specific records by ID or clear the entire table.
Parameters:
- ids (Optional[List[str]]): List of record IDs to delete.
- if_all (bool): Whether to delete all records in the table.
status
Returns:
VectorDBStatus: Object containing vector table metadata.
clear
Reset the vector table by dropping and recreating it.
load
Load the collection hosted on cloud service.
client
Provides access to the underlying SurrealDB client.
Responses are generated using AI and may contain mistakes.