繁体   English   中英

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

[英]How to search the database for a field which is a substring of the query by using sqlite

问题描述

我想从名为Variations的表中搜索查询= 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%快,尤其是当我有一个拥有超过一千万行的大型数据库时。 我也不能使用相等性,因为我正在寻找子字符串。

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

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

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

您不能为此使用fts4。 文档中

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”之类的词的行(实际上,Enron电子邮件数据集实际上不包含任何此类词),而FTS3表上的MATCH查询仅选择那些词。包含“ linux”作为离散标记的行。 两种搜索都不区分大小写。

因此,您的查询将仅匹配单词为“ Angela”的字符串(至少这就是我解释“离散令牌”的方式)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM