This is the implementation of the Weaviate for MindsDB.

Weaviate

Weaviate is an open-source vector database. It allows you to store data objects and vector embeddings from your favorite ML-models, and scale seamlessly into billions of data objects. _

Implementation

This handler uses weaviate-client python library connect to a weaviate instance. The required arguments to establish a connection are:
  • weaviate_url: url of the weaviate database
  • weaviate_api_key: API key to authenticate with weaviate (in case of cloud instance).
  • persistence_directory: directory to be used in case of local storage

Creating connection

In order to make use of this handler and connect to a Weaviate server in MindsDB, the following syntax can be used:
CREATE DATABASE weaviate_datasource
            WITH ENGINE = "weaviate",
            PARAMETERS = {
                "weaviate_url" : "https://sample.weaviate.network",
                "weaviate_api_key": "api-key"
};
CREATE DATABASE weaviate_datasource
            WITH ENGINE = "weaviate",
            PARAMETERS = {
                "weaviate_url" : "https://localhost:8080",
};
CREATE DATABASE weaviate_datasource
            WITH ENGINE = "weaviate",
            PARAMETERS = {
                "persistence_directory" : "db_path",
};

Dropping connection

To drop the connection, use this command
DROP DATABASE weaviate_datasource;

Creating tables

To insert data from a pre-existing table, use CREATE
CREATE TABLE weaviate_datascource.test
(SELECT * FROM sqlitedb.test);
As weaviate currently doesn’t support json field. So, this creates another table for the “metadata” field and a reference is created in the original table which points to its metadata entry. Weaviate follows GraphQL conventions where classes (which are table schemas) start with a capital letter and properties start with a lowercase letter. So whenever we create a table, the table’s name gets capitalized.

Dropping collections

To drop a Weaviate table use this command
DROP TABLE weaviate_datasource.tablename;

Querying and selecting

To query database using a search vector, you can use search_vector or embeddings in WHERE clause
SELECT * from weaviate_datasource.test
WHERE search_vector = '[3.0, 1.0, 2.0, 4.5]'
LIMIT 10;
Basic query
SELECT * from weaviate_datasource.test
You can use WHERE clause on dynamic fields like normal SQL
SELECT * FROM weaviate_datasource.createtest
WHERE category = "science";

Deleting records

You can delete entries using DELETE just like in SQL.
DELETE FROM weaviate_datasource.test
WHERE id IN (1, 2, 3);
Update is not supported by mindsdb vector database