Noizu.Weaviate - README

Noizu.Weaviate is an Elixir library providing a wrapper around Weaviate's REST and GraphQL APIs. It supports schema/collection management, object CRUD, batch operations, GraphQL queries (Get, filters, search operators), backups, classification, and more.

Table of Contents

Installation

You can install Noizu.Weaviate by adding it as a dependency in your mix.exs file:

def deps do
[
{:noizu_weaviate, "~> 0.1.0"}
]
end

Then, run mix deps.get to fetch the dependency.

Configuration

To configure Noizu.Weaviate, you need to set the Weaviate API key in your application's configuration. Update your config/config.exs file with the following configuration:

config :noizu_weaviate,
weaviate_api_key: "your_api_key_here"

Usage

Noizu.Weaviate provides an easy-to-use API for working with Weaviate schema and objects.

Defining Schema Classes

To define a schema class, you can use the Noizu.Weaviate.Class module and the weaviate_class macro. Here's an example:

defmodule Product do
use Noizu.Weaviate.Class
weaviate_class("Product") do
description "A class for representing products in Weaviate"
property :name, :string
property :price, :number
property :description, :text
end
end

Creating Objects

You can create objects using the Noizu.Weaviate.Api.Objects.create function. Here's an example:

object = %Product{name: "iPhone 12", price: 999.99, description: "The latest iPhone model"}
{:ok, response} = Noizu.Weaviate.Api.Objects.create(object)

Editing Objects

You can edit objects using the Noizu.Weaviate.Api.Objects.update function. Here's an example:

object = %Product{id: "object_id", name: "New iPhone 12", price: 1099.99, description: "The new iPhone model"}
{:ok, response} = Noizu.Weaviate.Api.Objects.update(object)

Deleting Objects

You can delete objects using the Noizu.Weaviate.Api.Objects.delete function. Here's an example:

{:ok, response} = Noizu.Weaviate.Api.Objects.delete("class_name", "object_id")

API Modules

Noizu.Weaviate provides several API modules for working with Weaviate. Here's an overview of the available modules and their functionalities:

Noizu.Weaviate.Api.Meta

This module provides functions for getting meta information about the Weaviate instance. You can get information about the Weaviate version, host, and more.

See Noizu.Weaviate.Api.Meta README for more details.

Noizu.Weaviate.Api.Batch

This module provides functions for batch operations in Weaviate. You can batch create objects and references, as well as batch delete objects.

See Noizu.Weaviate.Api.Batch README for more details.

Noizu.Weaviate.Api.Backups

This module provides functions for working with backups in Weaviate. You can create backups, get backup status, restore backups, and get restore status.

See Noizu.Weaviate.Api.Backups README for more details.

Noizu.Weaviate.Api.Schema

This module provides functions for working with the Weaviate schema. You can create, get, update, and delete classes, properties, shards, and tenants.

See Noizu.Weaviate.Api.Schema README for more details.

Noizu.Weaviate.Api.Nodes

This module provides functions for getting information about the Weaviate nodes. You can get information about the connected nodes in the Weaviate cluster.

See Noizu.Weaviate.Api.Nodes README for more details.

Noizu.Weaviate.Api.Objects

This module provides functions for interacting with data objects in Weaviate. You can create, get, update, patch, delete, and validate objects.

See Noizu.Weaviate.Api.Objects README for more details.

Noizu.Weaviate.Api.Auth

This module provides functions for authentication in the Weaviate API. You can get the OpenID configuration, check the liveness of the Weaviate instance, and check the readiness of the Weaviate instance.

See Noizu.Weaviate.Api.Auth README for more details.

Noizu.Weaviate.Api.Classification

This module provides functions for classification operations in Weaviate. You can start a classification, get the status of a classification, and cancel a classification.

See Noizu.Weaviate.Api.Classification README for more details.

For more detailed documentation on all available functions and options, please refer to the individual module readmes provided above.

GraphQL Module

Noizu.Weaviate.GraphQL provides a builder-pattern API for constructing Weaviate GraphQL queries.

Basic Get Query

alias Noizu.Weaviate.GraphQL
query = GraphQL.get("Article")
|> GraphQL.properties(["title", "content", "wordCount"])
|> GraphQL.limit(10)
|> GraphQL.additional([:id, :distance, :creation_time])
# With vector search
query = GraphQL.get("Article")
|> GraphQL.properties(["title", "content"])
|> GraphQL.search_operator(%{nearText: %{concepts: ["machine learning"]}})
|> GraphQL.limit(5)
|> GraphQL.additional([:id, :distance])
# With hybrid search
query = GraphQL.get("Article")
|> GraphQL.properties(["title", "content"])
|> GraphQL.search_operator(%{hybrid: %{query: "machine learning", alpha: 0.75}})
|> GraphQL.autocut(1)
# With where filter
alias Noizu.Weaviate.GraphQL.Where
filter = Where.and_operator(
Where.equal("category", "Technology"),
Where.greater_than("wordCount", 500)
)
query = GraphQL.get("Article")
|> GraphQL.properties(["title", "content"])
|> GraphQL.where(filter)
|> GraphQL.sort(%{path: ["title"], order: :asc})
# With groupBy
query = GraphQL.get("Article")
|> GraphQL.properties(["title"])
|> GraphQL.search_operator(%{nearText: %{concepts: ["AI"]}})
|> GraphQL.group_by("category", 5, 3)

Available Search Operators

OperatorDescriptionStatus
nearTextSemantic text searchImplemented
nearVectorRaw vector similarityImplemented
nearObjectSimilar to existing objectImplemented
nearImageImage similarityImplemented
bm25Keyword (BM25) searchImplemented
hybridCombined vector + keywordImplemented
askQuestion answeringImplemented
groupGrouping (deprecated)Implemented
nearAudioAudio similarityNot yet
nearVideoVideo similarityNot yet
nearDepthDepth map similarityNot yet
nearThermalThermal image similarityNot yet
nearIMUIMU sensor data similarityNot yet

See GraphQL API Reference for full details including Aggregate queries, Explore queries, generative search (RAG), reranking, named vectors, and multi-tenancy.

API Reference Docs

Comprehensive API reference documentation covering the latest Weaviate features (v1.28+):

Weaviate Feature Coverage

Summary of library coverage vs. current Weaviate API surface (v1.28+):

Feature AreaStatusNotes
Schema/Collection CRUDImplementedClasses, properties, shards, tenants
Object CRUDImplementedCreate, get, update, patch, delete, validate
Batch OperationsImplementedBatch create/delete objects, batch create references
BackupsImplementedCreate, restore, status for all backends
ClassificationImplementedknn, zeroshot
NodesImplementedCluster node info
MetaImplementedServer version and module info
Auth / Well-KnownImplementedOIDC config, liveness, readiness
GraphQL GetImplementedWith search operators, filters, pagination, sort
GraphQL AggregateNot yetCount, sum, mean, median, topOccurrences, etc.
GraphQL ExploreNot yetCross-collection vector search
Named VectorsNot yetMultiple vectors per collection (vectorConfig)
Multi-Tenancy in queriesNot yettenant parameter in Get/Aggregate
Tenant StatesNot yetINACTIVE, OFFLOADED states
RBAC / AuthorizationNot yetRole and permission management
New Search OperatorsNot yetnearAudio, nearVideo, nearDepth, nearThermal, nearIMU
Hybrid Fusion TypesNot yetrankedFusion, relativeScoreFusion
ContainsAny/ContainsAllNot yetArray filter operators
Nested PropertiesNot yetobject/object[] data types
Vector QuantizationNot yetPQ, BQ, SQ compression
Generative Search (RAG)PartialKey exists, structured params not built out
RerankingPartialKey exists, structured params not built out