InMemoryEmbeddingStore 检索方法(langchain4j)
接口:
EmbeddingStore<T>,实现类InMemoryEmbeddingStore<T>✅ 推荐新版:
search(EmbeddingSearchRequest)⚠️
findRelevant属于旧版default方法,新版本标记废弃,仅做兼容
1. search(官方推荐,你前面代码用的)
java
EmbeddingSearchResult<T> search(EmbeddingSearchRequest request);
EmbeddingSearchRequest 可配置:
queryEmbedding:查询向量(必填)maxResults:返回topNminScore:最低相似度阈值filter:元数据过滤(按metadata筛选)
示例:
java
EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.maxResults(3)
.minScore(0.6)
.filter(MetadataFilter.key("source").isEqualTo("book.pdf"))
.build();
EmbeddingSearchResult<TextSegment> result = store.search(request);
List<EmbeddingMatch<TextSegment>> matches = result.matches();
2. findRelevant 系列(旧版,不推荐新项目)
java
// ① 只指定向量和max,minScore默认0
List<EmbeddingMatch<T>> findRelevant(Embedding queryEmbedding, int maxResults);
// ② 指定向量、max、最低相似度
List<EmbeddingMatch<T>> findRelevant(Embedding queryEmbedding, int maxResults, double minScore);
// ③ 带元数据过滤器
List<EmbeddingMatch<T>> findRelevant(Embedding queryEmbedding, int maxResults, Filter filter);
返回
List<EmbeddingMatch<T>>,直接拿到匹配列表,没有外层EmbeddingSearchResult对象。
检索返回对象
EmbeddingMatch<T>score():余弦相似度,0~1,越大越相似embedded():存入的TextSegmentembeddingId():向量id
两种API对比
| search() | findRelevant() | |
|---|---|---|
| 返回 | EmbeddingSearchResult | List<EmbeddingMatch> |
| 配置 | 统一builder,支持max/minScore/filter | 多个重载方法 |
| 状态 | ✅ 推荐,新特性都在这里 | ⚠️ 逐步废弃 |
| 扩展性 | 更好,后续向量库统一接口 | 简单快速原型 |
补充
InMemoryEmbeddingStore 使用暴力全量余弦相似度计算,没有索引,数据量大后会变慢。
需要我写一段带filter元数据过滤的检索示例吗?