跳到主要内容

OpenSearch

https://opensearch.org/

Maven依存関係

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-opensearch</artifactId>
<version>1.18.1-beta28</version>
</dependency>

API

OpenSearchEmbeddingStore は、類似度検索に exact k-NN とスコアリングスクリプト実装を使用します。 詳細は OpenSearch k-NN ドキュメント を参照してください。

機能

  • メタデータフィルタリングFilter API を使ってメタデータで検索結果を絞り込める
  • 削除操作
    • ID による埋め込みの削除
    • メタデータフィルタによる埋め込みの削除
    • すべての埋め込みの削除(インデックスを削除)
  • AWS サポート:Amazon OpenSearch Service および Amazon OpenSearch Serverless をネイティブサポート

基本的な使い方

ローカルまたはネットワーク経由で到達可能な OpenSearch 向けに OpenSearchEmbeddingStore インスタンスを作成する:

OpenSearchEmbeddingStore store = OpenSearchEmbeddingStore.builder()
.serverUrl("http://localhost:9200")
.indexName("my-embeddings")
.build();

認証付き:

OpenSearchEmbeddingStore store = OpenSearchEmbeddingStore.builder()
.serverUrl("https://my-opensearch.example.com:9200")
.userName("admin")
.password("admin")
.indexName("my-embeddings")
.build();

AWS OpenSearch

Amazon OpenSearch Service または OpenSearch Serverless 向け:

AwsSdk2TransportOptions options = AwsSdk2TransportOptions.builder()
.setCredentials(DefaultCredentialsProvider.create())
.build();

OpenSearchEmbeddingStore store = OpenSearchEmbeddingStore.builder()
.serverUrl("https://search-domain.us-east-1.es.amazonaws.com")
.serviceName("es") // or "aoss" for Serverless
.region("us-east-1")
.options(options)
.indexName("my-embeddings")
.build();

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

メタデータで検索結果を絞り込む:

Filter filter = metadataKey("category").isEqualTo("documentation");

EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.filter(filter)
.maxResults(10)
.build();

EmbeddingSearchResult<TextSegment> result = store.search(searchRequest);

サポートされるフィルタ操作:

  • 比較:isEqualToisNotEqualToisGreaterThanisGreaterThanOrEqualToisLessThanisLessThanOrEqualTo
  • コレクション:isInisNotIn
  • 論理:andornot

削除操作

ID による埋め込みの削除:

store.removeAll(List.of("id1", "id2", "id3"));

メタデータフィルタによる埋め込みの削除:

Filter filter = metadataKey("status").isEqualTo("archived");
store.removeAll(filter);

すべての埋め込みの削除(インデックスを削除):

store.removeAll();