我有这样的表:
CREATE VIRTUAL TABLE t USING FTS3(hidden, text1, text2)
Run Code Online (Sandbox Code Playgroud)
我希望用户能够搜索'text1'和'text2'列,所以查询是
SELECT docid FROM t WHERE t MATCH ?
Run Code Online (Sandbox Code Playgroud)
可能的要求是:
SELECT docid FROM t WHERE t MATCH 'foo'
SELECT docid FROM t WHERE t MATCH 'text1:foo OR text2:bar'
Run Code Online (Sandbox Code Playgroud)
问:如何从搜索中排除"隐藏"列,以便用户无法通过隐藏值查找行?
我将使用'hidden'列来引用辅助表中的行以及其他信息.
Luk*_*ath 11
旧线程,但如果你使用的是更新的SQLite版本(> 3.8),你现在可以使用该notindexed选项,例如:
CREATE VIRTUAL TABLE t USING FTS4(uuid, document, notindexed=uuid);
Run Code Online (Sandbox Code Playgroud)
这将从匹配查询中排除列.
我也通过嵌入我自己的SQLite 3.8版本在iOS上工作.
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';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |