MariaDB ベクトルストア
このセクションでは、ドキュメントの埋め込みを保存し、類似性検索を実行するための MariaDBVectorStore
のセットアップについて説明します。
MariaDB ベクトル (英語) は MariaDB 11.7 の一部であり、機械学習によって生成された埋め込みの保存と検索を可能にします。ベクトルインデックスを使用した効率的なベクトル類似性検索機能を提供し、コサイン類似度とユークリッド距離メトリクスの両方をサポートします。
前提条件
実行中の MariaDB (11.7+) インスタンス。次のオプションが利用可能です。
必要に応じて、EmbeddingModel が
MariaDBVectorStore
によって保存される埋め込みを生成するための API キー。
自動構成
Spring AI は、MariaDB ベクトルストアの Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml
ファイルに次の依存関係を追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mariadb-store-spring-boot-starter</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-mariadb-store-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
ベクトルストアの実装では必要なスキーマを初期化できますが、適切なコンストラクターで initializeSchema
ブール値を指定するか、application.properties
ファイルで …initialize-schema=true
を設定することによってオプトインする必要があります。
これは重大な変更です。Spring AI の以前のバージョンでは、このスキーマの初期化はデフォルトで行われていました。 |
さらに、設定済みの EmbeddingModel
Bean が必要です。詳細については、"EmbeddingModel" セクションを参照してください。
例: OpenAI EmbeddingModel を使用するには、次の依存関係を追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
マイルストーンおよび / またはスナップショットリポジトリをビルドファイルに追加するには、リポジトリセクションを参照してください。 |
これで、アプリケーションで MariaDBVectorStore
をオートワイヤーできるようになりました。
@Autowired VectorStore vectorStore;
// ...
List<Document> documents = List.of(
new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),
new Document("The World is Big and Salvation Lurks Around the Corner"),
new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));
// Add the documents to MariaDB
vectorStore.add(documents);
// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.builder().query("Spring").topK(5).build());
プロパティの構成
MariaDB に接続して MariaDBVectorStore
を使用するには、インスタンスのアクセス詳細を提供する必要があります。簡単な構成は、Spring Boot の application.yml
を介して提供できます。
spring:
datasource:
url: jdbc:mariadb://localhost/db
username: myUser
password: myPassword
ai:
vectorstore:
mariadb:
initialize-schema: true
distance-type: COSINE
dimensions: 1536
Docker Compose または Testcontainers 経由で MariaDB Vector を Spring Boot 開発サービスとして実行する場合、URL、ユーザー名、パスワードは Spring Boot によって自動的に構成されるため、構成する必要はありません。 |
spring.ai.vectorstore.mariadb.*
で始まるプロパティは、MariaDBVectorStore
を構成するために使用されます。
プロパティ | 説明 | デフォルト値 |
---|---|---|
| 必要なスキーマを初期化するかどうか |
|
| 検索距離型。 |
|
| 埋め込み次元。明示的に指定されていない場合は、提供された |
|
| 起動時に既存のベクトルストアテーブルを削除します。 |
|
| ベクトルストアスキーマ名 |
|
| ベクトルストアテーブル名 |
|
| スキーマとテーブル名の検証を有効にして、それらが有効で既存のオブジェクトであることを確認します。 |
|
カスタムスキーマやテーブル名を構成する場合は、spring.ai.vectorstore.mariadb.schema-validation=true を設定してスキーマ検証を有効にすることを検討してください。これにより、名前の正確性が保証され、SQL インジェクション攻撃のリスクが軽減されます。 |
手動構成
Spring Boot 自動構成を使用する代わりに、MariaDB ベクトルストアを手動で構成できます。そのためには、プロジェクトに次の依存関係を追加する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mariadb-store</artifactId>
</dependency>
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
次に、ビルダーパターンを使用して MariaDBVectorStore
Bean を作成します。
@Bean
public VectorStore vectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel embeddingModel) {
return MariaDBVectorStore.builder(jdbcTemplate, embeddingModel)
.dimensions(1536) // Optional: defaults to 1536
.distanceType(MariaDBDistanceType.COSINE) // Optional: defaults to COSINE
.schemaName("mydb") // Optional: defaults to null
.vectorTableName("custom_vectors") // Optional: defaults to "vector_store"
.contentFieldName("text") // Optional: defaults to "content"
.embeddingFieldName("embedding") // Optional: defaults to "embedding"
.idFieldName("doc_id") // Optional: defaults to "id"
.metadataFieldName("meta") // Optional: defaults to "metadata"
.initializeSchema(true) // Optional: defaults to false
.schemaValidation(true) // Optional: defaults to false
.removeExistingVectorStoreTable(false) // Optional: defaults to false
.maxDocumentBatchSize(10000) // Optional: defaults to 10000
.build();
}
// This can be any EmbeddingModel implementation
@Bean
public EmbeddingModel embeddingModel() {
return new OpenAiEmbeddingModel(new OpenAiApi(System.getenv("OPENAI_API_KEY")));
}
メタデータフィルタリング
MariaDB Vector ストアでは、汎用的で移植可能なメタデータフィルターを活用できます。
例: 次のいずれかのテキスト式言語を使用できます。
vectorStore.similaritySearch(
SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression("author in ['john', 'jill'] && article_type == 'blog'").build());
または、Filter.Expression
DSL を使用してプログラム的に次のようにします。
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression(b.and(
b.in("author", "john", "jill"),
b.eq("article_type", "blog")).build()).build());
これらのフィルター式は、同等の MariaDB JSON パス式に自動的に変換されます。 |