如何使用sqlite在数据库中搜索作为查询子字符串的字段

时间:2015-04-15 12:47:26

标签: sqlite

问题描述

我想从名为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万行的大型数据库。我不能使用相等,因为我正在寻找子串。

  1. 我创建了一个虚拟表create virtual table variation_virtual using fts4(ID, ID_ENTITE, NAME, TYPE, LANGUAGE);
  2. 使用VARIATIONS insert into variation_virtual select * from VARIATIONS;
  3. 填充虚拟表格
  4. 选择查询表示如下:

    SELECT ID_ENTITE, NAME FROM variation_virtual WHERE NAME MATCH "Angela";
    

  5. 问题

    查询中缺少什么。我正在做的与我们想要检查查询是否是表中字符串的子字符串相反。

1 个答案:

答案 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'为单词的字符串(至少这是我解释'离散令牌'的方式)。