【问题标题】:SQLite: query with comparison operators in a FTS4 enabled tableSQLite:在启用 FTS4 的表中使用比较运算符进行查询
【发布时间】:2023-04-05 02:57:01
【问题描述】:

SQLite 版本:3.12.2

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

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

注1WordsNoSentence列的字数;

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

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

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

我尝试使用的是:

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

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

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

【问题讨论】:

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


    【解决方案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';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      相关资源
      最近更新 更多