SQLite FTS5 表搜索不一致

问题描述 投票:0回答:1

我有一个使用以下查询创建的 TRANSACTIONS 表:

CREATE TABLE TRANSACTIONS (ID INTEGER PRIMARY KEY, DESC VARCHAR(255), COMMENT VARCHAR(1024), INVOICE VARCHAR(255));  

然后我使用查询创建了 FTS5 虚拟表:

CREATE VIRTUAL TABLE TRANSACTIONS_FTS USING FTS5(
    content="TRANSACTIONS",
    content_rowid="ID",
    DESC,
    COMMENT,
    INVOICE,
);
 

然后我使用以下查询填写了 TRANSACTIONS_FTS:

INSERT INTO TRANSACTIONS_FTS (rowid, DESC, COMMENT, INVOICE) SELECT ID, DESC, COMMENT, INVOICE FROM TRANSACTIONS; 

现在我正在运行 2 个搜索查询。第一个:

SELECT * FROM TRANSACTIONS_FTS WHERE TRANSACTIONS_FTS MATCH 'cabana'; 

这给了我 27 个结果。

而第二个

SELECT DISTINCT T.*
FROM TRANSACTIONS AS T
JOIN (
    SELECT *
    FROM TRANSACTIONS_FTS
    WHERE TRANSACTIONS_FTS MATCH 'cabana'
) AS T_MATCH ON T.ID = T_MATCH.rowid;

给出 0 个结果。为什么它没有给出相同的结果?如何调试连接?

sqlite full-text-search
1个回答
0
投票

我终于能够让它发挥作用了。似乎 FTS 表中的 rowid 不会返回,除非您直接指定它。所以有效的搜索查询是:

SELECT T.*
        FROM TRANSACTIONS AS T
        JOIN (
            SELECT rowid
            FROM TRANSACTIONS_FTS
            WHERE TRANSACTIONS_FTS MATCH 'Cabana' -- Add more words as needed
        ) AS T_MATCH ON T.ID = T_MATCH.rowid
© www.soinside.com 2019 - 2024. All rights reserved.