# Повнотекстовий пошук FTS5 SUMMARY: Як Synapse використовує SQLite FTS5 для повнотекстового пошуку спогадів із затримкою менше мілісекунди. Повнотекстовий пошук FTS5 Synapse використовує FTS5 (Full-Text Search 5) для швидкого та гнучкого пошуку спогадів. Ця сторінка пояснює, як це працює та як ефективно ним користуватися. Що таке FTS5? FTS5 — це розширення SQLite (також доступне в PostgreSQL через розширення), що забезпечує можливості повнотекстового пошуку. Воно: - Індексує текстовий вміст для швидкого пошуку за ключовими словами - Підтримує булеві оператори (AND, OR, NOT) - Підтримує пошук фраз у лапках - Підтримує пошук за префіксом з - Ранжує результати за релевантністю Synapse використовує FTS5 для індексування всього вмісту спогадів, забезпечуючи пошук із затримкою менше мілісекунди серед тисяч спогадів. Як Synapse використовує FTS5 Коли ви викликаєте : 1. Вміст спогаду зберігається в таблиці 2. Вміст також вставляється у віртуальну таблицю FTS5 3. FTS5 автоматично токенізує та індексує вміст Коли ви викликаєте : 1. Synapse розбирає запит із використанням синтаксису FTS5 2. Виконує проти індексу FTS5 3. Фільтрує за (ізоляція тенантів) 4. Повертає ранжовані результати Синтаксис запитів Простий пошук за ключовим словом [CODE BLOCK] Повертає спогади, що містять «docker». Кілька ключових слів (неявний AND) [CODE BLOCK] Повертає спогади, що містять ОБИДВА слова «docker» та «swarm». Пошук фраз [CODE BLOCK] Повертає спогади, що містять точну фразу «docker swarm». Пошук за префіксом [CODE BLOCK] Повертає спогади зі словами, що починаються на «docker» (напр. «dockers», «dockerfile», «dockerize»). Булеве OR [CODE BLOCK] Повертає спогади, що містять «docker» АБО «kubernetes». Булеве NOT [CODE BLOCK] Повертає спогади, що містять «docker», але НЕ «swarm». Групування [CODE BLOCK] Повертає спогади, що містять «docker» або «kubernetes», але не «test». Практичні приклади Пошук спогадів про проєкт [CODE BLOCK] Пошук точної фрази [CODE BLOCK] Виключення тестових спогадів [CODE BLOCK] Пошук за технологією [CODE BLOCK] Ранжування FTS5 ранжує результати за релевантністю за алгоритмом BM25. Фактори: - Частота терміна (як часто термін зустрічається) - Зворотна частота документа (рідкісні терміни ранжуються вище) - Довжина документа (коротші документи з терміном ранжуються вище) - Вага колонки (title > content) Результати повертаються в порядку ранжування (найрелевантніші першими). Продуктивність | Операція | Затримка | |-----------|---------| | Пошук у 100 спогадах | < 5мс | | Пошук у 1 000 спогадах | < 10мс | | Пошук у 10 000 спогадах | < 25мс | | Пошук у 100 000 спогадах | < 100мс | FTS5 добре оптимізований для навантажень з переважанням читання. Обмеження Стемінг FTS5 за замовчуванням не робить стемінг. «running» та «run» — різні терміни. Обхідний шлях: Використовуйте пошук за префіксом: Толерантність до опечаток FTS5 не підтримує нечіткий пошук. Опечатка не поверне результатів. Обхідний шлях: Використовуйте семантичний пошук () для концептуального зіставлення. Стоп-слова Поширені слова (the, a, an, is) індексуються, але можуть бути не корисними для пошуку. FTS5 обробляє це автоматично. FTS5 проти семантичного пошуку | Аспект | FTS5 | Семантичний пошук | |--------|------|-----------------| | Швидкість | Менше мілісекунди | 50-100мс | | Зіставлення | Точні ключові слова | Концептуальне | | Толерантність до опечаток | Немає | Деяка | | Стемінг | Немає | Неявний | | Потребує ембеддингів | Ні | Так | | Найкраще для | Конкретних термінів | Концепцій | Використовуйте FTS5, коли знаєте ключові слова. Використовуйте семантичний пошук, коли потрібні «спогади про X», де X описано інакше. Найкращі практики > [!TIP] > - Використовуйте конкретні терміни — «docker swarm» краще за «container orchestration» > - Лапки для фраз — гарантує пошук фраз > - Префікс для варіацій — ловить «deploy», «deployment», «deploying» > - Виключайте шум — фільтрує тестові спогади > - Комбінуйте з тегами — звужує результати Наступні кроки - Семантичний пошук - Memory API - Найкращі практики роботи з пам'яттю