使用来自 sqlite3 的 FTS4 的两列
Use two columns for FTS4 from sqlite3
我有一个包含两列(ldap、名称)的 table。我希望能够使用库 FTS4 对这些列中的任何列进行全文搜索。在这里,我有几个用于创建虚拟 table 的语句,但是当我使用 Match 创建语句时,结果为空,尽管它应该 return data.
CREATE VIRTUAL TABLE IF NOT EXISTS sales_rep USING FTS4(ldap,name, content="__sales_rep");
CREATE TRIGGER IF NOT EXISTS __sales_rep___after_insert AFTER INSERT ON __sales_rep BEGIN INSERT INTO sales_rep (ldap, name) VALUES (new.ldap, new.name);END;
我正在插入一行 (ldap, name) VALUES ('test', 'Bryan');
但是使用
SELECT * FROM sales_rep where name MATCH 'Bry';
结果为空
在外部内容 FTS table 中插入数据需要明确提供 docid
的值,该值应该是内容 table 的 rowid
。
在您的情况下,您需要更改触发器:
CREATE TRIGGER __sales_rep___after_insert
AFTER INSERT ON __sales_rep
BEGIN
INSERT INTO sales_rep (docid, ldap, name)
VALUES (new.rowid, new.ldap, new.name);
END;
我有一个包含两列(ldap、名称)的 table。我希望能够使用库 FTS4 对这些列中的任何列进行全文搜索。在这里,我有几个用于创建虚拟 table 的语句,但是当我使用 Match 创建语句时,结果为空,尽管它应该 return data.
CREATE VIRTUAL TABLE IF NOT EXISTS sales_rep USING FTS4(ldap,name, content="__sales_rep");
CREATE TRIGGER IF NOT EXISTS __sales_rep___after_insert AFTER INSERT ON __sales_rep BEGIN INSERT INTO sales_rep (ldap, name) VALUES (new.ldap, new.name);END;
我正在插入一行 (ldap, name) VALUES ('test', 'Bryan'); 但是使用
SELECT * FROM sales_rep where name MATCH 'Bry';
结果为空
在外部内容 FTS table 中插入数据需要明确提供 docid
的值,该值应该是内容 table 的 rowid
。
在您的情况下,您需要更改触发器:
CREATE TRIGGER __sales_rep___after_insert
AFTER INSERT ON __sales_rep
BEGIN
INSERT INTO sales_rep (docid, ldap, name)
VALUES (new.rowid, new.ldap, new.name);
END;