find method
Implementation
@override
Future<List<Document>> find({required List<double> vector, int limit = 10}) async {
if (vector.length != dimension) {
throw ArgumentError('Query vector length (${vector.length}) must equal collection dimension ($dimension).');
}
final vectors = await repository.getVectors();
final results = <String, double>{};
for (var row in vectors) {
final v = VectorUtils.bytesToVector(row.vector, dimension);
final distance = (metric == Metric.cosine) ? _cosineSimilarity(vector, v) : _euclideanDistance(vector, v);
results[row.id] = distance;
}
final sortedEntries = results.entries.toList()
..sort((a, b) => (metric == Metric.cosine)
? b.value.compareTo(a.value)
: a.value.compareTo(b.value)
);
final ids = sortedEntries.take(limit).map((e) => e.key).toList();
if (ids.isEmpty) {
return [];
}
return await getDocuments(ids: ids);
}