Vector Databases: Pinecone, Weaviate & pgvector · Lezione

Definire lo schema di Weaviate

Progetti e gestisca lo schema dei dati in Weaviate, definendo classi e proprietà per gli oggetti vettoriali.

Lezione 1 di 411 passaggi

Definire lo schema di Weaviate è una lezione Vector Databases: Pinecone, Weaviate & pgvector gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Vector Databases: Pinecone, Weaviate & pgvector, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Vector Databases: Pinecone, Weaviate & pgvector include 4 lezioni in totale.

Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.

Weaviate Schema: Your Data Map

Welcome to Weaviate! To store and search data effectively, Weaviate needs to understand its structure. This is where the schema comes in.

Think of a schema as a blueprint for your data. It defines the types of data you'll store and how they relate.

Why Schema Matters

A well-defined schema is crucial for:

  • Data Consistency: Ensuring all objects conform to expected types.
  • Efficient Indexing: Weaviate uses the schema to build efficient search indexes.
  • Vectorization: Guiding how Weaviate generates and stores vector embeddings for your data.
  • Querying: Enabling powerful semantic and filtered searches.

Classes: Main Data Types

In Weaviate, the primary building blocks of your schema are classes. A class is like a table in a relational database or a collection in a NoSQL database.

Each class represents a distinct type of object you want to store, such as an "Article", "Product", or "User".

Your First Weaviate Class

Let's define a simple class named Article. This class will represent articles in our database.

In Weaviate, a class definition includes its name and an optional description. We'll add properties later.

import weaviate

if __name__ == "__main__":
    # Define a basic class schema
    article_class_schema = {
        "class": "Article",
        "description": "A class for storing articles"
    }
    print("--- Defined Article Class Schema ---")
    print(f"Class Name: {article_class_schema['class']}")
    print(f"Description: {article_class_schema['description']}")
    # In a real app, you'd add this to Weaviate:
    # client.schema.create_class(article_class_schema)

Properties: Data Fields

Within each class, you define properties. These are the individual fields or attributes that describe an object of that class.

For an Article class, properties might include title, content, author, or publicationDate.

Essential Property Types

Weaviate supports various data types for properties. Some common ones include:

  • text: For strings of text (e.g., names, descriptions).
  • int: For whole numbers.
  • number: For floating-point numbers.
  • boolean: For true/false values.
  • date: For date and time values.
  • text[]: For arrays of text strings.

Each property must have a defined data type.

Class with Properties

Now, let's enhance our Article class by adding some properties. We'll include title, content, and wordCount.

Notice how each property has a name and a dataType.

import weaviate

if __name__ == "__main__":
    # Define a class schema with properties
    article_class_with_props = {
        "class": "Article",
        "description": "A class for storing articles with properties",
        "properties": [
            {
                "name": "title",
                "dataType": ["text"],
                "description": "The title of the article"
            },
            {
                "name": "content",
                "dataType": ["text"],
                "description": "The main content of the article"
            },
            {
                "name": "wordCount",
                "dataType": ["int"],
                "description": "The number of words in the article"
            }
        ]
    }
    print("--- Defined Article Class with Properties ---")
    print(f"Class Name: {article_class_with_props['class']}")
    for prop in article_class_with_props['properties']:
        print(f"  Property: {prop['name']}, Type: {prop['dataType'][0]}")
    # client.schema.create_class(article_class_with_props)

Vectorization & Indexing

Weaviate automatically handles vectorizing your data and building a vector index. By default, it uses a text2vec model for text properties.

You can configure the vectorizer (e.g., which model to use) and the vector index (e.g., HNSW parameters) directly within your class definition.

import weaviate

if __name__ == "__main__":
    # Example of a class with vectorizer configuration
    product_class_schema = {
        "class": "Product",
        "description": "A class for e-commerce products",
        "vectorizer": "text2vec-openai", # Or "text2vec-huggingface", etc.
        "vectorIndexConfig": {
            "efConstruction": 128,
            "maxConnections": 64,
            "ef": -1 # default for queries
        },
        "properties": [
            {"name": "name", "dataType": ["text"]},
            {"name": "description", "dataType": ["text"]}
        ]
    }
    print("--- Defined Product Class with Vector Config ---")
    print(f"Class Name: {product_class_schema['class']}")
    print(f"Vectorizer: {product_class_schema['vectorizer']}")
    print(f"Vector Index Config (efConstruction): {product_class_schema['vectorIndexConfig']['efConstruction']}")
    # client.schema.create_class(product_class_schema)

Adding a New Property

What if you need to add a new property to an existing class? Weaviate allows you to update your schema by adding new properties.

You cannot change existing property types or delete properties directly without re-creating the class (and potentially losing data).

import weaviate

if __name__ == "__main__":
    # Imagine 'Article' class already exists
    # This defines the NEW property to add
    new_property = {
        "name": "category",
        "dataType": ["text"],
        "description": "The category of the article"
    }
    print("--- New Property Definition ---")
    print(f"Name: {new_property['name']}, Type: {new_property['dataType'][0]}")
    # In a real app, you'd add this to Weaviate:
    # client.schema.property.create(
    #     class_name="Article",
    #     property=new_property
    # )
    print("\nTo add this, you'd call client.schema.property.create(class_name, property_object)")

Schema Quick Check

Which of the following statements about Weaviate schema definition are TRUE?

Recap: Schema Essentials

You've learned the fundamentals of Weaviate schema definition!

  • Classes are your main data types.
  • Properties define the attributes within each class.
  • Weaviate uses the schema for indexing and vectorization.
  • You can add new properties to existing classes to evolve your schema.

A well-structured schema is key to powerful semantic search in Weaviate.

Gratis per iniziare

Impara Vector Databases: Pinecone, Weaviate & pgvector con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
12
Lezioni
48

Domande Frequenti

La lezione «Definire lo schema di Weaviate» è gratuita?

Sì — il testo completo di «Definire lo schema di Weaviate» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Vector Databases: Pinecone, Weaviate & pgvector, passa a CoddyKit PRO. Il corso Vector Databases: Pinecone, Weaviate & pgvector include 4 lezioni in totale.

Cosa imparerò in «Definire lo schema di Weaviate»?

Progetti e gestisca lo schema dei dati in Weaviate, definendo classi e proprietà per gli oggetti vettoriali. Eserciti Vector Databases: Pinecone, Weaviate & pgvector con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Vector Databases: Pinecone, Weaviate & pgvector?

Non è richiesta alcuna esperienza precedente. Vector Databases: Pinecone, Weaviate & pgvector su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Definire lo schema di Weaviate»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Vector Databases: Pinecone, Weaviate & pgvector?

Sì. Ogni lezione Vector Databases: Pinecone, Weaviate & pgvector include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Definire lo schema di Weaviate
  2. Importare oggetti dati
  3. Query GraphQL in Weaviate
  4. Moduli vectorizer e auto-embedding
← Torna a Vector Databases: Pinecone, Weaviate & pgvector