mirror of
https://github.com/simon987/sist2.git
synced 2025-12-20 02:26:08 +00:00
SQLite search backend
This commit is contained in:
@@ -3,43 +3,75 @@ const char *FtsDatabaseSchema =
|
||||
" id TEXT NOT NULL,"
|
||||
" index_id TEXT NOT NULL,"
|
||||
" size INTEGER NOT NULL,"
|
||||
" name TEXT NOT NULL,"
|
||||
" path TEXT NOT NULL,"
|
||||
" path_depth INT NOT NULL,"
|
||||
" mtime INTEGER NOT NULL,"
|
||||
" mime TEXT NOT NULL,"
|
||||
" mime TEXT,"
|
||||
" json_data TEXT NOT NULL,"
|
||||
" PRIMARY KEY (id, index_id)"
|
||||
");"
|
||||
""
|
||||
"CREATE VIEW IF NOT EXISTS document_view (rowid, name, content)"
|
||||
"CREATE TABLE IF NOT EXISTS stats ("
|
||||
" mtime_min INTEGER,"
|
||||
" mtime_max INTEGER"
|
||||
");"
|
||||
""
|
||||
"CREATE TABLE IF NOT EXISTS path_index ("
|
||||
" path TEXT,"
|
||||
" index_id TEXT,"
|
||||
" count INTEGER NOT NULL,"
|
||||
" depth INTEGER NOT NULL,"
|
||||
" PRIMARY KEY (path, index_id)"
|
||||
");"
|
||||
""
|
||||
"CREATE TABLE IF NOT EXISTS mime_index ("
|
||||
" index_id TEXT,"
|
||||
" mime TEXT,"
|
||||
" count INT,"
|
||||
" PRIMARY KEY(index_id, mime)"
|
||||
");"
|
||||
""
|
||||
"CREATE TABLE IF NOT EXISTS tag ("
|
||||
" id TEXT NOT NULL,"
|
||||
" tag TEXT NOT NULL,"
|
||||
" PRIMARY KEY (id, tag)"
|
||||
");"
|
||||
"CREATE INDEX IF NOT EXISTS tag_tag_idx ON tag(tag);"
|
||||
"CREATE INDEX IF NOT EXISTS tag_id_idx ON tag(id);"
|
||||
"CREATE TRIGGER IF NOT EXISTS tag_write_trigger"
|
||||
" AFTER INSERT ON tag"
|
||||
" BEGIN"
|
||||
" UPDATE document_index"
|
||||
" SET json_data = json_set(json_data, '$.tag', (SELECT json_group_array(tag) FROM tag WHERE id = NEW.id))"
|
||||
" WHERE id = NEW.id;"
|
||||
" END;"
|
||||
""
|
||||
"CREATE TRIGGER IF NOT EXISTS tag_delete_trigger"
|
||||
" AFTER DELETE ON tag"
|
||||
" BEGIN"
|
||||
" UPDATE document_index"
|
||||
" SET json_data = json_set(json_data, '$.tag', (SELECT json_group_array(tag) FROM tag WHERE id = OLD.id))"
|
||||
" WHERE id = OLD.id;"
|
||||
" END;"
|
||||
""
|
||||
"CREATE VIEW IF NOT EXISTS document_view (id, name, content, title)"
|
||||
" AS"
|
||||
" SELECT rowid,"
|
||||
" json_data->>'name',"
|
||||
" json_data->>'content'"
|
||||
" json_data->>'content',"
|
||||
" json_data->>'title'"
|
||||
" FROM document_index;"
|
||||
""
|
||||
"CREATE INDEX IF NOT EXISTS document_index_size_idx ON document_index (size);"
|
||||
"CREATE INDEX IF NOT EXISTS document_index_mtime_idx ON document_index (mtime);"
|
||||
"CREATE INDEX IF NOT EXISTS document_index_mime_idx ON document_index (mime);"
|
||||
"CREATE INDEX IF NOT EXISTS document_index_path_idx ON document_index (path);"
|
||||
"CREATE INDEX IF NOT EXISTS document_index_path_depth_idx ON document_index (path_depth);"
|
||||
""
|
||||
"CREATE VIRTUAL TABLE IF NOT EXISTS search USING fts5 ("
|
||||
" name,"
|
||||
" content,"
|
||||
" content='document_view'"
|
||||
" name,"
|
||||
" content,"
|
||||
" title,"
|
||||
" content='document_view',"
|
||||
" content_rowid='id'"
|
||||
");"
|
||||
""
|
||||
"CREATE TRIGGER IF NOT EXISTS on_insert AFTER INSERT ON document_index BEGIN"
|
||||
" INSERT INTO search(rowid, name, content) VALUES (new.rowid, new.json_data->>'name', new.json_data->>'content');"
|
||||
"END;"
|
||||
"CREATE TRIGGER IF NOT EXISTS on_delete AFTER DELETE ON document_index BEGIN"
|
||||
" INSERT INTO search(search, name, content) VALUES('delete', old.json_data->>'name', old.json_data->>'content');"
|
||||
"END;"
|
||||
"CREATE TRIGGER IF NOT EXISTS on_update AFTER UPDATE ON document_index BEGIN"
|
||||
" INSERT INTO search(search, rowid, name, content) VALUES('delete', old.rowid, old.json_data->>'name', old.json_data->>'content');"
|
||||
" INSERT INTO search(rowid, name, content) VALUES (new.rowid, new.json_data->>'name', new.json_data->>'content');"
|
||||
"END;";
|
||||
// name^8, content^3, title^8
|
||||
"INSERT INTO search(search, rank) VALUES('rank', 'bm25(8, 3, 8)');"
|
||||
"";
|
||||
|
||||
const char *IpcDatabaseSchema =
|
||||
"CREATE TABLE parse_job ("
|
||||
@@ -78,7 +110,8 @@ const char *IndexDatabaseSchema =
|
||||
""
|
||||
"CREATE TABLE tag ("
|
||||
" id TEXT NOT NULL,"
|
||||
" tag TEXT NOT NULL"
|
||||
" tag TEXT NOT NULL,"
|
||||
" PRIMARY KEY (id, tag)"
|
||||
");"
|
||||
""
|
||||
"CREATE TABLE document_sidecar ("
|
||||
|
||||
Reference in New Issue
Block a user