diff --git a/src/db/sqlite.ts b/src/db/sqlite.ts index 070e9ea..ab62120 100644 --- a/src/db/sqlite.ts +++ b/src/db/sqlite.ts @@ -333,6 +333,11 @@ export async function sqlite(config: SqliteConfig): Promise { } }, + async listIds() { + const rows = db.prepare('SELECT id FROM documents_meta').all() as Array<{ id: string }> + return rows.map(r => r.id) + }, + async clear() { db.exec('DELETE FROM documents_fts') db.exec('DELETE FROM documents_vec') diff --git a/src/retriv.ts b/src/retriv.ts index 05a8234..56a25c1 100644 --- a/src/retriv.ts +++ b/src/retriv.ts @@ -226,6 +226,19 @@ export async function createRetriv(options: RetrivOptions): Promise d.listIds) + const ids = await driver?.listIds?.() ?? [] + if (!chunker) + return ids + const parentIds = new Set() + for (const id of ids) { + const sep = id.indexOf('#chunk-') + parentIds.add(sep >= 0 ? id.substring(0, sep) : id) + } + return Array.from(parentIds) + }, + async clear() { await Promise.all(drivers.filter(d => d.clear).map(d => d.clear!())) parentDocs.clear() diff --git a/src/types.ts b/src/types.ts index 6dfce2a..97c208a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -137,6 +137,11 @@ export interface SearchProvider { */ remove?: (ids: string[]) => Promise<{ count: number }> + /** + * List all indexed document IDs + */ + listIds?: () => Promise + /** * Clear all indexed documents */