我想从名为Variations的表中搜索数据库中的 query = Angela 。问题是数据库不是 Angela 。它包含天使。如您所见, a 缺失。
我要查询的表格如下:
"CREATE TABLE IF NOT EXISTS VARIATIONS
(ID INTEGER PRIMARY KEY NOT NULL,
ID_ENTITE INTEGER,
NAME TEXT,
TYPE TEXT,
LANGUAGE TEXT);"
要搜索我使用fts4
的查询,因为它比LIKE%
更快,特别是如果我有一个超过1000万行的大型数据库。我不能使用相等,因为我正在寻找子串。
create virtual table variation_virtual using fts4(ID, ID_ENTITE, NAME, TYPE, LANGUAGE);
insert into variation_virtual select * from VARIATIONS;
选择查询表示如下:
SELECT ID_ENTITE, NAME FROM variation_virtual WHERE NAME MATCH "Angela";
查询中缺少什么。我正在做的与我们想要检查查询是否是表中字符串的子字符串相反。
答案 0 :(得分:1)
你不能使用fts4。来自documentation:
SELECT count(*) FROM enrondata1 WHERE content MATCH 'linux'; /* 0.03 seconds */
SELECT count(*) FROM enrondata2 WHERE content LIKE '%linux%'; /* 22.5 seconds */
当然,上面的两个查询不是 完全相同。例如,LIKE查询匹配行 包含诸如“linuxophobe”或“EnterpriseLinux”之类的术语(因为它 碰巧,安然电子邮件数据集实际上并不包含任何此类数据 条款),而FTS3表上的MATCH查询仅选择那些 包含“linux”作为离散标记的行。两个搜索都是 不区分大小写的。
因此,您的查询只匹配以'Angela'为单词的字符串(至少这是我解释'离散令牌'的方式)。