LangChain4j integration for Chroma embedding store enabling storage, retrieval, and similarity search of vector embeddings with metadata filtering support for both API V1 and V2.
—
Core LangChain4j types used with ChromaEmbeddingStore (from langchain4j-core library).
Represents a vector embedding.
package dev.langchain4j.data.embedding;
public class Embeddingpublic static Embedding from(float[] vector);Creates embedding from float array.
Example:
Embedding emb = Embedding.from(new float[]{0.1f, 0.2f, 0.3f});public static Embedding from(List<Float> vector);Creates embedding from Float list.
Example:
List<Float> vector = Arrays.asList(0.1f, 0.2f, 0.3f);
Embedding emb = Embedding.from(vector);public float[] vector();Returns the embedding vector as float array.
public List<Float> vectorAsList();Returns the embedding vector as Float list.
Represents a text segment with optional metadata.
package dev.langchain4j.data.segment;
public class TextSegmentpublic static TextSegment from(String text);Creates text segment from string.
Example:
TextSegment seg = TextSegment.from("document text");public static TextSegment from(String text, Metadata metadata);Creates text segment with metadata.
Example:
Metadata meta = new Metadata().put("author", "John");
TextSegment seg = TextSegment.from("document text", meta);public String text();Returns the text content.
public Metadata metadata();Returns the metadata (may be null).
Represents metadata as key-value pairs.
package dev.langchain4j.data.document;
public class Metadatapublic Metadata();Creates empty metadata.
public Metadata(Map<String, ?> map);Creates metadata from map.
public Metadata put(String key, String value);Adds string value. Returns this for chaining.
public Metadata put(String key, java.util.UUID value);Adds UUID value.
public Metadata put(String key, int value);Adds integer value.
public Metadata put(String key, long value);Adds long value.
public Metadata put(String key, float value);Adds float value.
public Metadata put(String key, double value);Adds double value.
public String getString(String key);Returns string value or null.
public java.util.UUID getUUID(String key);Returns UUID value or null.
public Integer getInteger(String key);Returns integer value or null.
public Long getLong(String key);Returns long value or null.
public Float getFloat(String key);Returns float value or null.
public Double getDouble(String key);Returns double value or null.
public Map<String, Object> toMap();Converts metadata to map.
public boolean containsKey(String key);Checks if key exists.
Supported by Chroma:
StringUUIDIntegerLongFloatDoubleNOT Supported:
Boolean - Chroma does not support boolean metadata// Empty metadata
Metadata meta = new Metadata();
// With values
Metadata meta = new Metadata()
.put("author", "John Doe")
.put("year", 2024)
.put("rating", 4.5)
.put("id", UUID.randomUUID());Map<String, Object> map = new HashMap<>();
map.put("title", "Document");
map.put("pages", 100);
Metadata meta = new Metadata(map);String author = meta.getString("author");
Integer year = meta.getInteger("year");
Double rating = meta.getDouble("rating");
if (meta.containsKey("category")) {
String category = meta.getString("category");
}// Get methods return null if key doesn't exist
Integer year = meta.getInteger("year");
if (year != null) {
// Use year
}
// Check existence first
if (meta.containsKey("year")) {
int year = meta.getInteger("year");
}Single match result from embedding search.
package dev.langchain4j.store.embedding;
public class EmbeddingMatch<Embedded>public double score();Returns similarity score (0.0 to 1.0, higher is more similar).
public String embeddingId();Returns the embedding ID.
public Embedding embedding();Returns the embedding vector (may be null).
public Embedded embedded();Returns the associated content (TextSegment). May be null if no text segment was stored.
EmbeddingMatch<TextSegment> match = ...;
double score = match.score();
String id = match.embeddingId();
Embedding emb = match.embedding();
TextSegment segment = match.embedded();
if (segment != null) {
String text = segment.text();
Metadata meta = segment.metadata();
}Embedding
↓
Used in: add(), addAll(), search()
TextSegment
├─ String text
└─ Metadata metadata
↓
Stored with: Embedding
Retrieved in: EmbeddingMatch
Metadata
↓
Part of: TextSegment
Used in: filters
EmbeddingMatch
├─ double score
├─ String embeddingId
├─ Embedding embedding
└─ TextSegment embedded
↓
Returned from: search()// 1. Create embedding
Embedding embedding = embeddingModel.embed(text).content();
// 2. Create metadata
Metadata metadata = new Metadata()
.put("author", "John Doe")
.put("date", System.currentTimeMillis())
.put("category", "tech");
// 3. Create text segment
TextSegment segment = TextSegment.from(text, metadata);
// 4. Store together
String id = store.add(embedding, segment);EmbeddingSearchResult<TextSegment> result = store.search(request);
List<String> texts = new ArrayList<>();
List<Metadata> metadataList = new ArrayList<>();
for (EmbeddingMatch<TextSegment> match : result.matches()) {
if (match.score() > 0.7) {
TextSegment seg = match.embedded();
if (seg != null) {
texts.add(seg.text());
metadataList.add(seg.metadata());
}
}
}// Store with filterable metadata
Metadata meta = new Metadata()
.put("status", "published")
.put("year", 2024)
.put("priority", 5);
TextSegment seg = TextSegment.from(text, meta);
store.add(embedding, seg);
// Later: filter by metadata
Filter filter = metadataKey("status").isEqualTo("published")
.and(metadataKey("year").isGreaterThanOrEqualTo(2023));Install with Tessl CLI
npx tessl i tessl/maven-dev-langchain4j--langchain4j-chroma