Files
glchat/internal/database/migrations/00007_messages_search_lower.sql
grendervill 1aef57dfd9 feat(search): нечёткий поиск по сообщениям — по началу слова и по подстроке
Поиск требовал ввести слово целиком. Теперь:

- FTS5 ищет по началу слова: «пр» находит «Привет» (последнее слово запроса
  получает префикс), регистр не важен;
- добавлена нормализованная копия текста (`messages.content_lower`, миграция
  00007): подстрочные совпадения ищутся через LIKE без учёта регистра, включая
  кириллицу (SQLite lower() её не приводит — регистр опускает приложение);
- при старте индекс дополняется у старых сообщений (порциями по 500);
- результаты FTS и LIKE объединяются без дублей, сортировка по новизне;
- тест: «пр» и «ивет» находят все три сообщения с «Привет/приветствие/ПРИВЕТ»,
  посторонний текст не попадает.
2026-09-20 11:01:32 +03:00

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;