public final class VectorStoreDocumentRetriever implements DocumentRetriever {
private final VectorStore vectorStore;
private final Double similarityThreshold;
private final Integer topK;
private final Supplier<Filter.Expression> filterExpression;
@Override
public List<Document> retrieve(Query query) {
Assert.notNull(query, "query cannot be null");
var searchRequest = SearchRequest.builder()
.query(query.text())
.filterExpression(this.filterExpression.get())
.similarityThreshold(this.similarityThreshold)
.topK(this.topK)
.build();
return this.vectorStore.similaritySearch(searchRequest);
}
}
I think that similarityThreshold\topK\filterExpression should be carried by Query. It can make VectorStoreDocumentRetriever be a singleton Object.