我在做什麼?
我在使用Electron在JavaScript中編寫文件標記程序,我想使用SQLite。儘管如此,我無法弄清楚如何實現通過標籤進行搜索。我不熟悉SQL和SQLite,所以我不確定這完全可以通過查詢來完成。我如何去搜索如下所述?如何在SQLite中進行高級查詢以通過標籤搜索文件?
檢索詳情:
我看了一下FTS3/4。除了通配符搜索外,我可以做任何我想要的東西。
- 搜索與所有指定標記的文件:
blue_sky AND green_grass
- 搜索文件而不給出標籤:
NOT blue_sky AND NOT green_grass
- 搜索文件與一些給出標籤:
green_sky OR blue_sky
- 使用通配符搜索文件在標籤中:上述的
*sky AND *grass AND *bl*e*
- 組合:
blue_sky AND green*
/green_grass AND blue_sky OR green_sky
表:
可以改變
CREATE TABLE files (
id INTEGER PRIMARY KEY,
name TEXT
);
CREATE TABLE tags (
id INTEGER PRIMARY KEY,
name TEXT
);
CREATE TABLE file_tags (
id INTEGER PRIMARY KEY,
file_id INTEGER,
tag_id INTEGER
);
實例:
INSERT INTO files (name) VALUES ('file_1.png');
INSERT INTO files (name) VALUES ('file_2.png');
INSERT INTO files (name) VALUES ('file_3.png');
INSERT INTO files (name) VALUES ('file_4.png');
INSERT INTO tags (name) VALUES ('blue_sky');
INSERT INTO tags (name) VALUES ('green_sky');
INSERT INTO tags (name) VALUES ('green_grass');
INSERT INTO tags (name) VALUES ('blue_grass');
INSERT INTO tags (name) VALUES ('greenish_blue_sky');
INSERT INTO file_tags (file_id, tag_id) VALUES(file1_id, blue_sky_id);
INSERT INTO file_tags (file_id, tag_id) VALUES(file1_id, green_grass_id);
INSERT INTO file_tags (file_id, tag_id) VALUES(file2_id, blue_sky_id);
INSERT INTO file_tags (file_id, tag_id) VALUES(file2_id, blue_grass_id);
INSERT INTO file_tags (file_id, tag_id) VALUES(file3_id, greenish_blue_sky_id);
INSERT INTO file_tags (file_id, tag_id) VALUES(file4_id, green_sky_id);
INSERT INTO file_tags (file_id, tag_id) VALUES(file4_id, blue_grass_id);
查詢:blue_sky and green_grass
結果:file_1
查詢:blue_sky or green_sky
結果:file_1, file_2, file_4
查詢:blue_sky and green_grass or blue_grass
結果:file_1, file_2
查詢:*ish*
結果:file_3
查詢:*bl*e*
結果:file_1, file_2, file_3, file_4
查詢:*sky and not blue_grass
結果:file_1, file3
注意:如果SQLite是不是因爲工作的工具,我很開放的建議。
通配符搜索可以通過使用'LIKE'來實現:https://www.tutorialspoint.com/sqlite/sqlite_like_clause.htm – juzraai
我不確定關於sqlLite,因爲我不使用它。你的數據庫設計很好。它將使您能夠達到您的既定目標。我認爲是一個注意吸氣劑是你使用JavaScript的意圖。它運行在客戶端上。數據庫通常位於服務器上。也許Electron解決了這個問題。我不知道這是什麼,所以我不能說。 –
@juzraai我嘗試過'LIKE',但我不確定如何使用它來構造一個查詢,以滿足我的其他條件。 – Yuki