Определение схемы Weaviate
Проектируйте и администрируйте схему данных в Weaviate, определяя классы и свойства векторных объектов.
«Определение схемы Weaviate» — бесплатный урок Vector Databases: Pinecone, Weaviate & pgvector на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Vector Databases: Pinecone, Weaviate & pgvector, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Vector Databases: Pinecone, Weaviate & pgvector содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
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.
Часто задаваемые вопросы
Урок «Определение схемы Weaviate» бесплатный?
Да — полный текст урока «Определение схемы Weaviate» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Vector Databases: Pinecone, Weaviate & pgvector, подпишись на CoddyKit PRO. Курс Vector Databases: Pinecone, Weaviate & pgvector содержит 4 уроков всего.
Чему я научусь в уроке «Определение схемы Weaviate»?
Проектируйте и администрируйте схему данных в Weaviate, определяя классы и свойства векторных объектов. Ты практикуешь Vector Databases: Pinecone, Weaviate & pgvector с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Vector Databases: Pinecone, Weaviate & pgvector?
Предыдущий опыт не требуется. Vector Databases: Pinecone, Weaviate & pgvector на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Определение схемы Weaviate»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Vector Databases: Pinecone, Weaviate & pgvector?
Да. Каждый урок Vector Databases: Pinecone, Weaviate & pgvector включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Определение схемы Weaviate
- Импорт объектов данных
- Запросы GraphQL в Weaviate
- Модули векторизации и автоматическое создание эмбеддингов