我有这样的表:

CREATE VIRTUAL TABLE t USING FTS3(hidden, text1, text2)

我希望用户能够搜索'text1'和'text2'列,因此查询为
SELECT docid FROM t WHERE t MATCH ?

可能的请求是:
SELECT docid FROM t WHERE t MATCH 'foo'
SELECT docid FROM t WHERE t MATCH 'text1:foo OR text2:bar'

问:如何从搜索中排除“隐藏”列,以使用户无法按隐藏值查找行?

我将使用“隐藏”列来引用具有更多信息的辅助表中的行。

最佳答案

FTS3表将获得一个称为docid的免费64位整数列,该列未编制索引。只需将其他数据放在单独的表中,该表的主键与FTS3表的docid相同。

CREATE VIRTUAL TABLE t USING FTS3(text1, text2);

CREATE TABLE additional (id INTEGER PRIMARY KEY, hidden VARCHAR);

INSERT INTO t (docid, text1, text2) VALUES (243, 'foo', 'bar');
INSERT INTO additional VALUES (243, 'bas');

SELECT docid, text1, text2, hidden FROM t JOIN additional ON t.docid = additional.id WHERE t MATCH 'foo';

关于sqlite - 如何从FTS3表搜索中排除列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3915264/

10-11 22:19