ベクトルデータベースWeaviateにおける「スキーマ構造」は、データの構造や意味を定義し、検索や格納時の挙動を制御する重要な要素です。以下に、Classes、Properties、Vectorization設定の3つの観点から詳しく説明します。
1. Classes(クラス)
Weaviateでは、すべてのデータは「クラス」によってグループ化されます。クラスは、RDBMSにおけるテーブルに類似しており、1つのクラスが1種類のエンティティ(例:Article, Product, Personなど)を表します。
-
クラスの定義には以下が含まれます:
-
class: クラス名(例:Article) -
description: クラスの説明(省略可能) -
properties: このクラスに含まれるプロパティのリスト -
vectorizer: このクラスに使うベクトル化の手法(後述) -
moduleConfig: 使用するモジュールの詳細設定(例:OpenAI、Cohereなど)
-
2. Properties(プロパティ)
クラス内には複数のプロパティ(属性)を定義できます。各プロパティは、エンティティが持つ情報(テキスト、数値、日付など)を表します。
-
主な要素:
-
name: プロパティ名(例:title,content,publishedDate) -
dataType: データ型。Weaviateがサポートする型は以下の通り:-
text,string -
int,number -
boolean -
date -
他のクラスへの参照(オブジェクト関係)
-
-
description: プロパティの説明 -
tokenization: テキストデータの場合、トークン分割方式(word,field,whitespaceなど)
-
3. Vectorization設定
Weaviateの特長の一つが、データをベクトル化(embedding)してインデックス・検索できる点です。そのため、どのプロパティをベクトル化に使うか、どのモジュールを使うかを設定する必要があります。
ベクトル化の設定には、2つのレベルがあります
3.1 クラスレベルの設定(vectorizer)
vectorizer)-
指定例:
使用するベクトル化モジュール(例:
text2vec-openai,text2vec-cohere,none)を指定します。 -
noneを指定した場合、ユーザーが手動でベクトルを提供する必要があります。
3.2 プロパティレベルの除外(skip フラグ)
skip フラグ)-
moduleConfigで、特定のプロパティをベクトル化対象から除外可能です。
例:特定のプロパティだけをベクトル化対象にしたい場合
補足:スキーマの柔軟性
-
スキーマは動的に追加・更新できます。
-
クラスやプロパティはAPIやWeaviate Consoleから操作可能。
-
オブジェクト間のリンク(参照)もスキーマ内で定義でき、Graph構造の検索も可能。
まとめ
Weaviateのスキーマ構造は、以下の3層で構成されます:
| 要素 | 役割 |
|---|---|
| Classes | エンティティの種類を定義する単位 |
| Properties | 各エンティティの属性情報 |
| Vectorization設定 | ベクトル化処理の対象と方法を制御 |
このスキーマにより、Weaviateは意味的に構造化されたベクトル検索を柔軟に実現しています。
ChatGPT4o 生成日:2025/06/20