SQLite:在启用 FTS4 的表中使用比较运算符进行查询

标签 sqlite full-text-search string-matching comparison-operators fts4

SQLite版本:3.12.2

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

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

注1:WordsNoSentence列中的单词数;

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

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

  1. WordsNo 列的值等于或大于的所有行,例如 10;
  2. Sentence 列的值包含“book”等内容的所有行。

我尝试使用的是:

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

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

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

最佳答案

无论您尝试将什么声明为列类型,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';

关于SQLite:在启用 FTS4 的表中使用比较运算符进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37349981/

相关文章:

Azure 搜索服务与最新 Azure SQL 数据库实例中的全文搜索?

Javascript 字符串匹配

c - FsRtlIsNameInExpression 从不匹配任何内容

java - 当cursor.movetofirst为假时该怎么办(SQLite)

html - Elasticsearch : Strip HTML tags before indexing docs with html_strip filter not working

SQlite使用不同的 "on"语句两次连接同一个表

ruby-on-rails-3 - 链接 ActiveRecord::QueryMethods#from 和连接会产生错误的 SQL,缺少连接

python - 有没有办法通过Python中的正则表达式找到子字符串索引?

.net - App.config 连接字符串相对路径

sqlite - 从C#使用DateTimeOffset填充的datetime列上的SQLite排序顺序