跳到主要内容

OpenSearch

https://opensearch.org/

Maven 依赖

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-opensearch</artifactId>
<version>1.13.0-beta23</version>
</dependency>

API 参考

OpenSearchEmbeddingStore 使用精确 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") // 或 "aoss"(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();

示例