如何从 FTS3 表搜索中排除列

问题描述:

我有这样的桌子:

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

我希望用户能够搜索 'text1' 和 'text2' 列,因此查询是

I would like user to be able to searh over 'text1' and 'text2' columns, so the query is

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'

问:如何从搜索中排除隐藏"列,以便用户无法通过隐藏值找到行?

Q: how can I exclude 'hidden' column from search, so that user can't find rows by hidden value?

我将使用隐藏"列来引用带有附加信息的辅助表中的行.

I am going to use 'hidden' column to refer to rows in secondary table with additional information.

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

An FTS3 table gets a free 64 bit integer column called docid which is not indexed. Simply put additional data in a separate table where the Primary Key for that table is the same as the docid for the FTS3 table.

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';