Skip to main content
Version: v2.x

Connect Hasura to Weaviate

Introduction

Weaviate is a cloud-native, modular, real-time vector search engine that allows you to build intelligent applications by using machine learning models as the data layer. It is open-source and can be deployed on-premise or in the cloud.

Connecting vector databases to Hasura

To connect a vector database to Hasura, you'll need to take advantage of Hasura Data Connectors. You can deploy any custom data connector agent to Hasura Cloud using our CLI plugin. For more information, refer to the docs.

If you're curious what other connectors are available, check out our NDC Hub.

Step 1: Deploy a data connector agent

We'll use the Hasura CLI to deploy a custom data connector agent to Hasura Cloud. Below, we're using the create command and naming our connector weaviate-connector:v1. We're also passing in the GitHub repo URL for the connector agent using the --github-repo-url flag:

hasura connector create weaviate-connector:v1 --github-repo-url https://github.com/hasura/weaviate_gdc/tree/main

We can check on the progress of the deployment using the status command:

hasura connector status weaviate-connector:v1

Once the DONE status is returned, we can grab the URL for our data connector agent using the list command:

hasura connector list

This will return a list of all the custom data connector agents you own. The second value returned is the URL which we'll use in the next step; copy it to your clipboard.

Step 2: Add the data connector agent to your Hasura Cloud project

In your Cloud project, navigate to the Data tab and click Manage in the left-hand sidebar.

At the bottom of the screen, you'll see an expandable section titled Data Connector Agents.

Add the agent for a Weaviate database

Click this and scroll down to Add Agent.

Name this agent weaviate and paste the URL you copied from the CLI into the URL field and click Connect.

Add the agent for a Weaviate database

Step 3: Select the driver

Navigate to the Data tab and select Connect Database, then select Weaviate from the list of drivers:

Configure the Weaviate agent

Step 4: Connect your database

At this point, we'll need to configure a few parameters:

Connect Weaviate database
ParameterDescription
Database NameThe name of your Weaviate database.
apiKeyThe API key for your Weaviate database.
hostThe URL of your Weaviate database.
openAIKeyThe OpenAI key for use with your Weaviate database.
schemeThe URL scheme for your Weaviate database (http/https).
Where can I find these parameters?

For the Weaviate-specific parameters, on the Weaviate Cloud Services' Console, you can see your cluster's connection information on the cluster's card.

You can register for an OpenAI key here.

Step 5: Track your tables

To make schemas accessible for querying using GraphQL, we'll need to track them. In the example below, we're tracking a schema called Resume by checking the box next to it and clicking Track Selected:

Connect Weaviate database

Tracking this schema will generate a type available in your GraphQL API that you can query against 🎉

Don't have any tables to track?

You will need to define the schema in your vector database. For a walkthrough of setting up a Weaviate schema, refer to this tutorial.

Step 6: Define a remote relationship

The information stored in Weaviate is vectorized and not in a human-readable format. We want to be able to return the information from our relational database using the vectorized data from Weaviate. To do this, we need to define a remote relationship.

In the example below, we're defining a remote relationship between the Resume schema in our vector database and the application table in our relational database. This way, whenever we query the vectorized information in our Resume table, we can return the information from our relational database.

Define remote relationship

Step 7: Query your data

You can now query across both your vector database and your existing relational database tables as if they were in one location!

In our example, we have two tables in our relational database:

  1. candidate
Candidate 1 table
  1. application
Application 2 table

Our vector database stores the resumes as:

Resume store

If we head to the API tab in the Hasura Console, in our GraphQL query, we are able to fetch all the candidate and application information for a resume. Hasura brings this all together to provide this seamless querying experience.

Execute query

Next Steps