SQLite 正则表和 fts 表
Posted
技术标签:
【中文标题】SQLite 正则表和 fts 表【英文标题】:SQLite regular table and table for fts 【发布时间】:2013-10-28 12:10:25 【问题描述】:我有表 news (id, news_id, news_title) 并且我创建了 FTS 表:
CREATE VIRTUAL TABLE news_search USING fts4 (news_title, tokenize=porter);
我使用触发器来保持表 NEWS 和 news_search 同步:
CREATE TRIGGER IF NOT EXISTS insert_news_trigger
AFTER INSERT ON news
BEGIN
INSERT OR IGNORE INTO news_search (news_title) VALUES (NEW.news_title);
END;
问题:如何使用搜索?当我在 news_search 表中执行 MATCH 时,它只返回该表中的记录,但我需要 news 表中的 *news_id*。可能我应该将 *news_id* 列添加到 news_search 表中吗?
在 sqlite 中使用 fts 的正确方法是什么?
【问题讨论】:
【参考方案1】:阅读documentation; FTS 表还有一个rowid
列(也称为docid
),您可以将其显式设置为与原始表的相应键相同的值。
假设 news.id
是 rowid
(即 INTEGER PRIMARY KEY),您应该更改触发器,将该 ID 值也复制到 news_search
表中。
您可以使用它来查找原始记录:
SELECT *
FROM news
WHERE id IN (SELECT docid
FROM news_search
WHERE news_title MATCH '?')
【讨论】:
以上是关于SQLite 正则表和 fts 表的主要内容,如果未能解决你的问题,请参考以下文章
Sqlite FTS5:使用 Trigram Tokenizer 进行子字符串匹配
如何最好地将多个文本文件导入 SQLite FTS 虚拟表?