用于fts的SQLite常规表和表

时间:2013-10-28 12:10:26

标签: sqlite full-text-search fts3 fts4

我有表新闻(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 个答案:

答案 0 :(得分:3)

阅读documentation; FTS表还有一个rowid列(也称为docid),您可以将其明确设置为与原始表的相应键相同的值。

假设news.idrowid(即INTEGER PRIMARY KEY),您应该更改触发器以将该ID值复制到news_search表中。 您可以使用它来查找原始记录:

SELECT *
FROM news
WHERE id IN (SELECT docid
             FROM news_search
             WHERE news_title MATCH '')