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@1.11.0