我有表新闻(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的正确方法是什么?
答案 0 :(得分:3)
阅读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 '')