簡體   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