1aef57dfd9
Поиск требовал ввести слово целиком. Теперь: - FTS5 ищет по началу слова: «пр» находит «Привет» (последнее слово запроса получает префикс), регистр не важен; - добавлена нормализованная копия текста (`messages.content_lower`, миграция 00007): подстрочные совпадения ищутся через LIKE без учёта регистра, включая кириллицу (SQLite lower() её не приводит — регистр опускает приложение); - при старте индекс дополняется у старых сообщений (порциями по 500); - результаты FTS и LIKE объединяются без дублей, сортировка по новизне; - тест: «пр» и «ивет» находят все три сообщения с «Привет/приветствие/ПРИВЕТ», посторонний текст не попадает.
11 lines
601 B
SQL
11 lines
601 B
SQL
-- +goose Up
|
|
-- Нечёткий поиск по сообщениям: FTS5 ищет по началу слова, а для поиска
|
|
-- подстроки нужна нормализованная копия текста (SQLite lower() не знает
|
|
-- кириллицу, поэтому регистр приводит приложение).
|
|
ALTER TABLE messages ADD COLUMN content_lower TEXT NOT NULL DEFAULT '';
|
|
CREATE INDEX messages_content_lower_idx ON messages (channel_id, id DESC);
|
|
|
|
-- +goose Down
|
|
DROP INDEX messages_content_lower_idx;
|
|
ALTER TABLE messages DROP COLUMN content_lower;
|