SQLite: запрос с операторами сравнения в таблице с поддержкой FTS4

Версия SQLite: 3.12.2

Используя это выражение, я создал таблицу для использования возможности быстрых текстовых запросов:

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

Примечание 1: WordsNo количество слов в Sentence колонка;

Затем я заполнил свою таблицу своими данными (~ 500000 строк) и, насколько я знаю, потому что я использовал FTS4Я могу использовать только match функция для проверки содержимого столбцов (поправьте меня, пожалуйста, если я не прав).

Я хочу сделать запрос данных с двумя условиями:

  1. Все строки, в которых значение WordsNo столбец равен или больше чем например 10;
  2. Все строки, в которых значение Sentence в столбце есть, например, "книга".

Я пытался использовать это:

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

Но, как я уже говорил, оператор сравнения не работает.

Как правильно добиться этого?

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';
Другие вопросы по тегам