Milvus embedding store integration for LangChain4j
—
Methods for storing embeddings in Milvus.
String add(Embedding embedding);Adds embedding with auto-generated UUID.
Embedding embedding = model.embed(text).content();
String id = store.add(embedding);void add(String id, Embedding embedding);Adds embedding with specified ID.
store.add("doc-123", embedding);String add(Embedding embedding, TextSegment textSegment);Adds embedding with associated text and metadata.
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.data.document.Metadata;
Metadata metadata = Metadata.from(Map.of(
"source", "docs.pdf",
"page", 42,
"category", "technical"
));
TextSegment segment = TextSegment.from("Document text", metadata);
String id = store.add(embedding, segment);List<String> addAll(List<Embedding> embeddings);Adds multiple embeddings with auto-generated IDs.
List<Embedding> embeddings = /* list of embeddings */;
List<String> ids = store.addAll(embeddings);void addAll(List<String> ids, List<Embedding> embeddings, List<TextSegment> textSegments);Adds multiple embeddings with custom IDs and segments.
Requirements: All lists must have same size
List<String> ids = Arrays.asList("id1", "id2", "id3");
List<Embedding> embeddings = /* list */;
List<TextSegment> segments = /* list */;
store.addAll(ids, embeddings, segments);Without segments:
store.addAll(ids, embeddings, null);TextSegment segment = TextSegment.from("Plain text");Metadata metadata = Metadata.from(Map.of(
"title", "Document Title",
"author", "John Doe",
"year", 2024,
"active", true
));
TextSegment segment = TextSegment.from("Content", metadata);import dev.langchain4j.model.embedding.EmbeddingModel;
EmbeddingModel model = /* your model */;
List<String> documents = /* your documents */;
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));
}
List<String> ids = store.addAll(embeddings);List<String> ids = new ArrayList<>();
List<Embedding> embeddings = new ArrayList<>();
List<TextSegment> segments = new ArrayList<>();
for (Document doc : documents) {
ids.add(doc.getId());
embeddings.add(model.embed(doc.getText()).content());
segments.add(TextSegment.from(doc.getText(), doc.getMetadata()));
}
store.addAll(ids, embeddings, segments);int batchSize = 500;
for (int i = 0; i < allEmbeddings.size(); i += batchSize) {
int end = Math.min(i + batchSize, allEmbeddings.size());
List<Embedding> batch = allEmbeddings.subList(i, end);
store.addAll(batch);
}MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
.host("localhost")
.collectionName("bulk")
.dimension(384)
.autoFlushOnInsert(false) // Critical for performance
.build();
store.addAll(largeList);addAll() instead of loops with add()addAll(ids, embeddings, null) stores only embeddingsaddAll([]) is no-optry {
String id = store.add(embedding, segment);
System.out.println("Added: " + id);
} catch (Exception e) {
System.err.println("Failed: " + e.getMessage());
// Handle error
}Install with Tessl CLI
npx tessl i tessl/maven-dev-langchain4j--langchain4j-milvus