1

テーブル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を使用する適切な方法は何ですか?

4

1 に答える 1

3

ドキュメントを読んでください。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 '')
于 2013-10-28T12:28:04.817 に答える