0Pricing
Vector Databases: Pinecone, Weaviate & pgvector · Lesson

Weaviate Schema Definition

Design and manage your data schema in Weaviate, defining classes and properties for your vector objects.

Weaviate Schema Definition is a free Vector Databases: Pinecone, Weaviate & pgvector lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Vector Databases: Pinecone, Weaviate & pgvector learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.

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.

Frequently asked questions

Is the “Weaviate Schema Definition” lesson free?

Yes — the full text of “Weaviate Schema Definition” is free to read here on the web, and the Vector Databases: Pinecone, Weaviate & pgvector course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Vector Databases: Pinecone, Weaviate & pgvector course, upgrade to CoddyKit PRO.

What will I learn in “Weaviate Schema Definition”?

Design and manage your data schema in Weaviate, defining classes and properties for your vector objects. You practise Vector Databases: Pinecone, Weaviate & pgvector with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Vector Databases: Pinecone, Weaviate & pgvector?

No prior experience is required. Vector Databases: Pinecone, Weaviate & pgvector on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.

How long does the “Weaviate Schema Definition” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Vector Databases: Pinecone, Weaviate & pgvector lesson?

Yes. Every Vector Databases: Pinecone, Weaviate & pgvector lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. Weaviate Schema Definition
  2. Importing Data Objects
  3. Weaviate GraphQL Queries
  4. Vectorizer Modules and Auto-Embedding
← Back to Vector Databases: Pinecone, Weaviate & pgvector