Milvus embedding store integration for LangChain4j
—
Fast-path examples for common use cases.
import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
import dev.langchain4j.store.embedding.EmbeddingSearchResult;
// Create store
MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
.host("localhost")
.port(19530)
.collectionName("quickstart")
.dimension(384)
.build();
// Add an embedding
Embedding embedding = /* from your model */;
TextSegment segment = TextSegment.from("Sample text");
String id = store.add(embedding, segment);
// Search
Embedding queryEmbedding = /* query from your model */;
EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.maxResults(5)
.build();
EmbeddingSearchResult<TextSegment> results = store.search(request);MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
.host("localhost")
.port(19530)
.collectionName("dev_embeddings")
.dimension(384)
.build();MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
.uri(System.getenv("MILVUS_URI"))
.token(System.getenv("MILVUS_TOKEN"))
.collectionName("prod_embeddings")
.dimension(1536)
.build();import java.util.List;
import java.util.ArrayList;
List<Embedding> embeddings = new ArrayList<>();
List<TextSegment> segments = new ArrayList<>();
for (String doc : documents) {
embeddings.add(model.embed(doc).content());
segments.add(TextSegment.from(doc));
}
// Use addAll with null for IDs (auto-generated)
List<String> ids = store.addAll(embeddings);import dev.langchain4j.store.embedding.filter.Filter;
import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;
import dev.langchain4j.data.document.Metadata;
import java.util.Map;
// Store with metadata
Metadata metadata = Metadata.from(Map.of(
"category", "documentation",
"year", 2024
));
TextSegment segment = TextSegment.from("text", metadata);
store.add(embedding, segment);
// Search with filter
Filter filter = metadataKey("category").isEqualTo("documentation");
EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.maxResults(10)
.filter(filter)
.build();EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.maxResults(100)
.minScore(0.8) // Only high-quality matches
.build();import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;
Filter oldFilter = metadataKey("year").isLessThan(2020);
store.removeAll(oldFilter);import io.milvus.param.IndexType;
import io.milvus.param.MetricType;
import io.milvus.common.clientenum.ConsistencyLevelEnum;
import java.util.Map;
MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
.host("localhost")
.collectionName("fast_search")
.dimension(768)
.indexType(IndexType.HNSW)
.metricType(MetricType.COSINE)
.consistencyLevel(ConsistencyLevelEnum.EVENTUALLY)
.extraParameters(Map.of("efConstruction", 200, "m", 16))
.autoFlushOnInsert(false)
.retrieveEmbeddingsOnSearch(false)
.build();import io.milvus.common.clientenum.ConsistencyLevelEnum;
// For immediate visibility of new data
MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
.host("localhost")
.collectionName("realtime")
.dimension(384)
.consistencyLevel(ConsistencyLevelEnum.STRONG)
.build();EmbeddingSearchResult<TextSegment> results = store.search(request);
for (EmbeddingMatch<TextSegment> match : results.matches()) {
System.out.println("Score: " + match.score());
System.out.println("ID: " + match.embeddingId());
TextSegment segment = match.embedded();
if (segment != null) {
System.out.println("Text: " + segment.text());
System.out.println("Metadata: " + segment.metadata());
}
}try {
String id = store.add(embedding, segment);
System.out.println("Added: " + id);
} catch (Exception e) {
System.err.println("Failed to add: " + e.getMessage());
// Handle appropriately
}Install with Tessl CLI
npx tessl i tessl/maven-dev-langchain4j--langchain4j-milvus