Экранирование определенных символов при выполнении поиска FTS - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь реализовать полнотекстовый поиск для sqlite3, но мне не удается найти какой-либо результат, если включен специальный символ.

Таблица "messages" имеет следующую схему

  • text
  • searchid

и содержит запись с текстом $100 и searchid dfjkgndfsj

Я пытался создать таблицус этим запросом

CREATE VIRTUAL TABLE messages_fts
          USING fts5(
              content = 'messages',
              content_rowid = 'searchid',
              tokenize = "unicode61 remove_diacritics 0",
            text,
          );

Однако, когда я пытаюсь выполнить поиск с помощью

SELECT *
    FROM messages
    WHERE fromid != 0 and searchid IN 
(SELECT rowid FROM messages_fts WHERE messages_fts MATCH '"$*"' limit 30)

, результат не возвращается

Более того, если я попытался выполнить поиск с помощью

SELECT *
    FROM messages
    WHERE fromid != 0 and searchid IN 
(SELECT rowid FROM messages_fts WHERE messages_fts MATCH '"$10*"' limit 30)

, запись найдена

Если я попытался выполнить поиск с помощью

SELECT *
    FROM messages
    WHERE fromid != 0 and searchid IN 
(SELECT rowid FROM messages_fts WHERE messages_fts MATCH '"-10*"' limit 30)

, запись также будет найдена

Пожалуйста, помогите указатьвсе, что я мог упустить / сделать неправильно, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...