SQLite:在启用 FTS4 的情况下使用比较运算符进行查询 table
SQLite: query with comparison operators in a FTS4 enabled table
SQLite 版本:3.12.2
我使用这个表达式创建了一个 table 以利用快速文本查询的可能性:
CREATE VIRTUAL TABLE sentence_tbl USING FTS4 (WordsNo INTEGER, Sentence TEXT);
注1:WordsNo
为Sentence
栏的字数;
然后我用我的数据(约 500,000 行)填充了我的 table,据我所知,因为我使用了 FTS4
,我只能使用 match
函数来检查对于列的内容(如果我错了请纠正我)。
我想做的是查询两个条件的数据:
WordsNo
列的值等于或大于的所有行,例如10;
Sentence
列的值包含例如 'book' 的所有行。
我尝试使用的是:
select * from sentence_tbl where WordsNo >= 10 and Sentence match "book"
但是正如我之前所说,比较运算符不起作用。
实现此目标的正确方法是什么?
FTS tables 始终包含字符串,无论您尝试将什么声明为列类型。
要存储其他数据,请同时使用 'real' table 和 FTS table:
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';
SQLite 版本:3.12.2
我使用这个表达式创建了一个 table 以利用快速文本查询的可能性:
CREATE VIRTUAL TABLE sentence_tbl USING FTS4 (WordsNo INTEGER, Sentence TEXT);
注1:WordsNo
为Sentence
栏的字数;
然后我用我的数据(约 500,000 行)填充了我的 table,据我所知,因为我使用了 FTS4
,我只能使用 match
函数来检查对于列的内容(如果我错了请纠正我)。
我想做的是查询两个条件的数据:
WordsNo
列的值等于或大于的所有行,例如10;Sentence
列的值包含例如 'book' 的所有行。
我尝试使用的是:
select * from sentence_tbl where WordsNo >= 10 and Sentence match "book"
但是正如我之前所说,比较运算符不起作用。
实现此目标的正确方法是什么?
FTS tables 始终包含字符串,无论您尝试将什么声明为列类型。
要存储其他数据,请同时使用 'real' table 和 FTS table:
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';