跳到主要内容

OpenSearch

https://opensearch.org/

Maven 依赖

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

API

OpenSearchEmbeddingStore 使用精确 k-NN 与评分脚本(scoring script)实现相似度搜索。 更多细节请参阅 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();

示例