OpenSearch

このセクションでは、ドキュメントの埋め込みを保存し、類似性検索を実行するために OpenSearch VectorStore を設定する手順について説明します。

OpenSearch (英語) は、もともと Elasticsearch から分岐し、Apache License 2.0 として配布されているオープンソースの検索および分析エンジンです。AI 生成アセットの統合と管理を簡素化することで、AI アプリケーション開発を強化します。OpenSearch は、ベクトル、語彙、ハイブリッド検索機能をサポートし、ベクトルデータベースの高度な機能を活用して、低レイテンシのクエリと類似性検索を容易にします ( ベクトルデータベースページ (英語) を参照)。このプラットフォームは、スケーラブルな AI 駆動型アプリケーションの構築に最適で、データ管理、フォールトトレランス、リソースアクセス制御のための堅牢なツールを提供します。

前提条件

  • 実行中の OpenSearch インスタンス。次のオプションが利用可能です。

  • EmbeddingModel インスタンスを使用してドキュメントの埋め込みを計算します。いくつかのオプションが利用可能です:

    • 必要に応じて、EmbeddingModel が OpenSearchVectorStore によって保存される埋め込みを生成するための API キー。

依存関係

プロジェクトに OpenSearch ベクトルストア 依存関係を追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-opensearch-store</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-opensearch-store'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

構成

OpenSearch に接続して OpenSearchVectorStore を使用するには、インスタンスのアクセス詳細を提供する必要があります。簡単な構成は、Spring Boot の application.yml を介して提供できます。

spring:
  opensearch:
    uris: <opensearch instance URIs>
    username: <opensearch username>
    password: <opensearch password>
    indexName: <opensearch index name>
    mappingJson: <JSON mapping for opensearch index>
# API key if needed, e.g. OpenAI
  ai:
    openai:
      api:
        key: <api-key>
デフォルト値と構成オプションについては、構成パラメーターのリストを確認してください。

自動構成

Spring AI は、OpenSearch ベクトルストア用の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml ファイルに次の依存関係を追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-opensearch-store-spring-boot-starter</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-opensearch-store-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

必要な Bean の例を次に示します。

@Bean
public EmbeddingModel embeddingModel() {
    // Can be any other EmbeddingModel implementation
    return new OpenAiEmbeddingModel(new OpenAiApi(System.getenv("SPRING_AI_OPENAI_API_KEY")));
}

これで、OpenSearchVectorStore をアプリケーション内のベクトルストアとして自動接続できるようになりました。

@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 OpenSearch
vectorStore.add(List.of(document));

// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));

構成プロパティ

Spring Boot 構成で次のプロパティを使用して、OpenSearch ベクトルストアをカスタマイズできます。

プロパティ 説明 デフォルト値

spring.opensearch.uris

OpenSearch クラスターエンドポイントの URI。

-

spring.opensearch.username

OpenSearch クラスターにアクセスするためのユーザー名。

-

spring.opensearch.password

指定されたユーザー名のパスワード。

-

spring.opensearch.indexName

OpenSearch クラスター内で使用されるデフォルトのインデックスの名前。

spring-ai-document-index

spring.opensearch.mappingJson

インデックスのマッピングを定義する JSON 文字列。ドキュメントとそのフィールドがどのように保存され、インデックス付けされるかを指定します。

{ "properties":{ "embedding":{ "type":"knn_vector", "dimension":1536 } } }

spring.opensearch.aws.host

OpenSearch インスタンスのホスト名。

-

spring.opensearch.aws.service-name

OpenSearch インスタンスの AWS サービス名。

-

spring.opensearch.aws.access-key

OpenSearch インスタンスの AWS アクセスキー。

-

spring.opensearch.aws.secret-key

OpenSearch インスタンスの AWS 秘密キー。

-

spring.opensearch.aws.region

OpenSearch インスタンスの AWS リージョン。

-

OpenSearch クライアント構成のカスタマイズ

Spring Boot で自動構成された OpenSearchClient と Apache HttpClient 5 Transport Bean が希望どおりでない場合、または必要ない場合でも、独自の Bean を定義することができます。OpenSearch Java クライアントドキュメント (英語) を参照してください。

Amazon OpenSearch サービスの構成に関する詳細情報については、こちらを参照してください。これを有効にするには、プロジェクトの Maven pom.xml ファイルに次の依存関係を追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-aws-opensearch-store-spring-boot-starter</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-aws-opensearch-store-spring-boot-starter'
}

メタデータフィルタリング

OpenSearch でも、汎用的でポータブルなメタデータフィルターを活用できます。

例: 次のいずれかのテキスト式言語を使用できます。

vectorStore.similaritySearch(SearchRequest.defaults()
        .withQuery("The World")
        .withTopK(TOP_K)
        .withSimilarityThreshold(SIMILARITY_THRESHOLD)
        .withFilterExpression("author in ['john', 'jill'] && 'article_type' == 'blog'"));

または、Filter.Expression DSL を使用してプログラム的に次のようにします。

FilterExpressionBuilder b = new FilterExpressionBuilder();

vectorStore.similaritySearch(SearchRequest.defaults()
        .withQuery("The World")
        .withTopK(TOP_K)
        .withSimilarityThreshold(SIMILARITY_THRESHOLD)
        .withFilterExpression(b.and(
                b.in("john", "jill"),
                b.eq("article_type", "blog")).build()));
これらの (ポータブル) フィルター式は、独自の OpenSearch クエリ文字列クエリ (英語) に自動的に変換されます。

例: この移植可能なフィルター式:

author in ['john', 'jill'] && 'article_type' == 'blog'

独自の OpenSearch フィルター形式に変換されます。

(metadata.author:john OR jill) AND metadata.article_type:blog