
dev.langchain4j.store.embedding.EmbeddingSearchRequest Maven / Gradle / Ivy
package dev.langchain4j.store.embedding;
import dev.langchain4j.data.document.Metadata;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.store.embedding.filter.Filter;
import java.util.Objects;
import static dev.langchain4j.internal.Utils.getOrDefault;
import static dev.langchain4j.internal.ValidationUtils.ensureBetween;
import static dev.langchain4j.internal.ValidationUtils.ensureGreaterThanZero;
import static dev.langchain4j.internal.ValidationUtils.ensureNotNull;
/**
* Represents a request to search in an {@link EmbeddingStore}.
*/
public class EmbeddingSearchRequest {
private final Embedding queryEmbedding;
private final int maxResults;
private final double minScore;
private final Filter filter;
/**
* Creates an instance of an EmbeddingSearchRequest.
*
* @param queryEmbedding The embedding used as a reference. Found embeddings should be similar to this one.
* This is a mandatory parameter.
* @param maxResults The maximum number of embeddings to return. This is an optional parameter. Default: 3
* @param minScore The minimum score, ranging from 0 to 1 (inclusive).
* Only embeddings with a score >= minScore will be returned.
* This is an optional parameter. Default: 0
* @param filter The filter to be applied to the {@link Metadata} during search.
* Only {@link TextSegment}s whose {@link Metadata}
* matches the {@link Filter} will be returned.
* Please note that not all {@link EmbeddingStore}s support this feature yet.
* This is an optional parameter. Default: no filtering
*/
public EmbeddingSearchRequest(Embedding queryEmbedding, Integer maxResults, Double minScore, Filter filter) {
this.queryEmbedding = ensureNotNull(queryEmbedding, "queryEmbedding");
this.maxResults = ensureGreaterThanZero(getOrDefault(maxResults, 3), "maxResults");
this.minScore = ensureBetween(getOrDefault(minScore, 0.0), 0.0, 1.0, "minScore");
this.filter = filter;
}
public static EmbeddingSearchRequestBuilder builder() {
return new EmbeddingSearchRequestBuilder();
}
public Embedding queryEmbedding() {
return queryEmbedding;
}
public int maxResults() {
return maxResults;
}
public double minScore() {
return minScore;
}
public Filter filter() {
return filter;
}
public boolean equals(final Object o) {
if (o == this) return true;
if (!(o instanceof EmbeddingSearchRequest other)) return false;
return this.maxResults == other.maxResults
&& this.minScore == other.minScore
&& Objects.equals(this.queryEmbedding, other.queryEmbedding)
&& Objects.equals(this.filter, other.filter);
}
public int hashCode() {
return Objects.hash(queryEmbedding, maxResults, minScore, filter);
}
public String toString() {
return "EmbeddingSearchRequest(queryEmbedding=" + this.queryEmbedding + ", maxResults=" + this.maxResults + ", minScore=" + this.minScore + ", filter=" + this.filter + ")";
}
public static class EmbeddingSearchRequestBuilder {
private Embedding queryEmbedding;
private Integer maxResults;
private Double minScore;
private Filter filter;
EmbeddingSearchRequestBuilder() {
}
public EmbeddingSearchRequestBuilder queryEmbedding(Embedding queryEmbedding) {
this.queryEmbedding = queryEmbedding;
return this;
}
public EmbeddingSearchRequestBuilder maxResults(Integer maxResults) {
this.maxResults = maxResults;
return this;
}
public EmbeddingSearchRequestBuilder minScore(Double minScore) {
this.minScore = minScore;
return this;
}
public EmbeddingSearchRequestBuilder filter(Filter filter) {
this.filter = filter;
return this;
}
public EmbeddingSearchRequest build() {
return new EmbeddingSearchRequest(this.queryEmbedding, this.maxResults, this.minScore, this.filter);
}
public String toString() {
return "EmbeddingSearchRequest.EmbeddingSearchRequestBuilder(queryEmbedding=" + this.queryEmbedding + ", maxResults=" + this.maxResults + ", minScore=" + this.minScore + ", filter=" + this.filter + ")";
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy