主题
OpenSearch
Maven 依赖
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-opensearch</artifactId>
<version>1.22.0-beta32</version>
</dependency>1
2
3
4
5
2
3
4
5
API
OpenSearchEmbeddingStore 使用精确 k-NN 配合评分脚本实现来做相似度搜索。 更多细节参见 OpenSearch k-NN 文档。
特性
- 元数据过滤:支持使用
FilterAPI 按元数据过滤搜索结果 - 移除操作:
- 按 ID 移除嵌入
- 按元数据过滤条件移除嵌入
- 移除所有嵌入(会丢弃索引)
- AWS 支持:原生支持 Amazon OpenSearch Service 与 Amazon OpenSearch Serverless
基本用法
要为本地或通过网络可达的 OpenSearch 创建 OpenSearchEmbeddingStore 实例:
java
OpenSearchEmbeddingStore store = OpenSearchEmbeddingStore.builder()
.serverUrl("http://localhost:9200")
.indexName("my-embeddings")
.build();1
2
3
4
2
3
4
带身份验证时:
java
OpenSearchEmbeddingStore store = OpenSearchEmbeddingStore.builder()
.serverUrl("https://my-opensearch.example.com:9200")
.userName("admin")
.password("admin")
.indexName("my-embeddings")
.build();1
2
3
4
5
6
2
3
4
5
6
AWS OpenSearch
对于 Amazon OpenSearch Service 或 OpenSearch Serverless:
java
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();1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
元数据过滤
按元数据过滤搜索结果:
java
Filter filter = metadataKey("category").isEqualTo("documentation");
EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.filter(filter)
.maxResults(10)
.build();
EmbeddingSearchResult<TextSegment> result = store.search(searchRequest);1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
支持的过滤操作:
- 比较:
isEqualTo、isNotEqualTo、isGreaterThan、isGreaterThanOrEqualTo、isLessThan、isLessThanOrEqualTo - 集合:
isIn、isNotIn - 逻辑:
and、or、not
移除操作
按 ID 移除嵌入:
java
store.removeAll(List.of("id1", "id2", "id3"));1
按元数据过滤条件移除嵌入:
java
Filter filter = metadataKey("status").isEqualTo("archived");
store.removeAll(filter);1
2
2
移除所有嵌入(丢弃索引):
java
store.removeAll();1