スキーマの定義と変更

ベクトルデータベースWeaviateにおける「スキーマの定義と変更」は、データ構造とベクトル検索の動作を決定する非常に重要な工程です。以下に、その基本的な考え方、操作手順、および注意点を詳しく説明します。


1. スキーマとは何か

Weaviateの**スキーマ(Schema)**は、投入するデータの構造を定義するものです。具体的には、次のような情報を含みます:

  • クラス(Class):データの種類(例:Article, Product, Personなど)

  • プロパティ(Property):クラス内のフィールド(例:title, description, priceなど)

  • データタイプ:プロパティの型(string, int, date など)

  • ベクトル化設定(Vectorization):どのプロパティをベクトル化するか、どのモジュールを使うか


2. スキーマの定義方法

スキーマはREST APIまたはPythonクライアント等を用いて定義できます。以下はREST APIを用いた基本的なクラス定義の例です。

例:Article クラスの作成

json
POST /v1/schema Content-Type: application/json { "class": "Article", "description": "News articles", "vectorizer": "text2vec-openai", "properties": [ { "name": "title", "dataType": ["text"] }, { "name": "content", "dataType": ["text"] }, { "name": "publishedAt", "dataType": ["date"] } ] }

このスキーマにより、Article クラスに対してタイトル、内容、日付を含むデータを投入できるようになります。


3. スキーマの確認

スキーマの全体構造は以下のように取得できます:

http
GET /v1/schema

特定のクラスだけを確認したい場合は:

http
GET /v1/schema/Article

4. スキーマの変更(追加・削除)

プロパティの追加

既存のクラスに新しいプロパティを追加するには、次のようなAPIを使用します:

json
POST /v1/schema/Article/properties Content-Type: application/json { "name": "author", "dataType": ["text"] }

プロパティの削除

Weaviateはプロパティの削除を公式にはサポートしていません。スキーマ構造の削除や変更を行いたい場合、クラスごと削除して再作成するのが一般的です。

http
DELETE /v1/schema/Article

注意:この操作により該当クラスの全データが削除されます。


5. ベストプラクティスと注意点

  • 設計前に構造を明確化すること:プロパティの削除ができないため、事前に十分な設計が求められます。

  • ベクトル化設定の理解:使用するベクトル化モジュール(例:text2vec-openai, text2vec-transformers)によって、ベクトル生成の対象や方式が異なります。

  • データ型の正確な指定textnumber, boolean, date, geoCoordinates, referenceなど正確に選定することが重要です。


6. Pythonクライアントを使ったスキーマ定義(参考)

Pythonクライアント(weaviate-client)を使用する場合の例:

python
import weaviate client = weaviate.Client("http://localhost:8080") article_class = { "class": "Article", "description": "News articles", "vectorizer": "text2vec-openai", "properties": [ { "name": "title", "dataType": ["text"] }, { "name": "content", "dataType": ["text"] } ] } client.schema.create_class(article_class)

まとめ

項目 内容
クラス定義 /v1/schema にPOST
プロパティ追加 /v1/schema/{class}/properties にPOST
スキーマ確認 /v1/schema または /v1/schema/{class} にGET
スキーマ削除 /v1/schema/{class} にDELETE(注意)
主な注意点 削除不可のため初期設計が重要

ChatGPT4o 生成日:2025/06/20