1

SQLite 版本:3.12.2

使用这个表达式,我创建了一个表来使用快速文本查询的可能性:

CREATE VIRTUAL TABLE sentence_tbl USING FTS4 (WordsNo INTEGER, Sentence TEXT);

注1:为栏目WordsNo字数;Sentence

然后,我用我的数据(约 500,000 行)填充了我的表,据我所知,因为我使用了FTS4,所以我只能使用match函数来检查列的内容(如果我错了,请纠正我)。

我想要做的是用两个条件查询数据:

  1. WordsNocolumn的值等于或大于例如 10的所有行;
  2. 列的值Sentence具有例如“book”的所有行。

我尝试使用的是:

select * from sentence_tbl where WordsNo >= 10 and Sentence match "book"

但正如我之前所说,比较运算符不起作用。

实现这一目标的正确方法是什么?

4

1 回答 1

1

无论您尝试将什么声明为列类型,FTS 表始终包含字符串。

要存储其他数据,请同时使用“真实”表和 FTS 表:

CREATE TABLE Sentence (
    ID INTEGER PRIMARY KEY,
    WordsNo INTEGER
);
CREATE VIRTUAL TABLE Sentence_FTS USING FTS4 (
    Sentence
);

SELECT Sentence.WordsNo,
       Sentence_FTS.Sentence
FROM Sentence
JOIN Sentence_FTS ON Sentence.ID = Sentence_FTS.docid
WHERE Sentence.WordsNo >= 10
  AND Sentence_FTS.Sentence MATCH 'book';
于 2016-05-20T18:26:27.183 回答