OpenSearch
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 文档。
功能
- 元数据过滤:支持使用
FilterAPI 按元数据过滤搜索结果 - 删除操作:
- 按 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);
支持的过滤操作:
- 比较:
isEqualTo、isNotEqualTo、isGreaterThan、isGreaterThanOrEqualTo、isLessThan、isLessThanOrEqualTo - 集合:
isIn、isNotIn - 逻辑:
and、or、not
删除操作
按 ID 删除嵌入:
store.removeAll(List.of("id1", "id2", "id3"));
按元数据过滤器删除嵌入:
Filter filter = metadataKey("status").isEqualTo("archived");
store.removeAll(filter);
删除全部嵌入(会删除索引):
store.removeAll();