searchSimilar method
Search for similar documents.
filter is an optional payload predicate, honored over the fields
declared filterable via FilterSchema (qdrant-edge on native, sqlite-vec
vec0 columns on native and web). A condition on an undeclared field is a
no-op: passing such a filter returns the same hits as filter: null and
never throws.
Implementation
@override
Future<List<RetrievalResult>> searchSimilar({
required String query,
int topK = 5,
double threshold = 0.0,
Filter? filter,
}) async {
if (_initializedEmbeddingModel == null) {
throw StateError(
'No embedding model is active. addDocument(content:) and '
'searchSimilar(query:) auto-embed text, which requires an embedding '
'model. Install and activate one with FlutterGemma.installEmbedder(...) '
'(or modelManager.setActiveModel) before calling these methods — or '
'pass a precomputed vector to addDocumentWithEmbedding(embedding:).',
);
}
// Generate query embedding and search
final queryEmbedding = await _initializedEmbeddingModel!.generateEmbedding(
query,
);
return await ServiceRegistry.instance.vectorStoreRepository.searchSimilar(
queryEmbedding: queryEmbedding,
topK: topK,
threshold: threshold,
filter: filter,
);
}