CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-dev-langchain4j--langchain4j-milvus

Milvus embedding store integration for LangChain4j

Pending
Overview
Eval results
Files

quickstart.mddocs/

Quick Start Guide

Fast-path examples for common use cases.

Minimal Working Example

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);

Common Scenarios

Local Development Setup

MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
    .host("localhost")
    .port(19530)
    .collectionName("dev_embeddings")
    .dimension(384)
    .build();

Production Zilliz Cloud

MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
    .uri(System.getenv("MILVUS_URI"))
    .token(System.getenv("MILVUS_TOKEN"))
    .collectionName("prod_embeddings")
    .dimension(1536)
    .build();

Batch Document Ingestion

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);

Search with Metadata Filter

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();

Threshold-Based Retrieval

EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
    .queryEmbedding(queryEmbedding)
    .maxResults(100)
    .minScore(0.8)  // Only high-quality matches
    .build();

Remove Old Documents

import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;

Filter oldFilter = metadataKey("year").isLessThan(2020);
store.removeAll(oldFilter);

High-Performance Configuration

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();

Real-Time Consistency

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();

Processing Results

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());
    }
}

Error Handling Pattern

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

docs

advanced.md

api-reference.md

configuration.md

index.md

patterns.md

quickstart.md

troubleshooting.md

tile.json