1

我有表新闻(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_id*。可能我应该将 *news_id* 列添加到news_search表吗?

在 sqlite 中使用 fts 的正确方法是什么?

4

1 回答 1

3

阅读文档;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 '')
于 2013-10-28T12:28:04.817 回答