listSegments method
Implementation
@override
Future<CollectionResult?> listSegments(String collectionName) async {
try {
Collection collection = await client.getCollection(name: collectionName);//, embeddingFunction: embeddingFunction);
String segmentIdOrderString = collection.metadata![segmentIdOrderKey];
List<String> segmentIdOrder = List<String>.from(jsonDecode(segmentIdOrderString));
GetResponse getResponse = await collection.get();
if(getResponse.documents == null) return null;
// Build segmentId-indexId Map, for fetching indexId quickly
List<String> idList = getResponse.ids;
Map<String, int> idMap = {};
for(int i=0; i< idList.length; i++) {
String id = idList[i];
idMap[id] = i;
}
List<SegmentInfo> segmentList = [];
for (String segmentId in segmentIdOrder) {
int i = idMap[segmentId]!; // fetch indexId quickly
SegmentInfo segment = SegmentInfo(
id: getResponse.ids[i],
text: getResponse.documents![i]!,
metadata: (getResponse.metadatas?[i] == null)?{}:_convertToFlatMetadata(getResponse.metadatas![i]!)
);
segmentList.add(segment);
}
return CollectionResult(name: collectionName, docsName: collection.metadata![docsNameKey], segmentList: segmentList);
} on ChromaApiClientException catch(e) {
VectorDatabaseException vdbException = VectorDatabaseException(
code: e.code??500,
message: e.message + ": " + (e.body is String ? (e.body as String) : e.body.toString())
);
throw vdbException;
}
}