Skip to main content

Повнотекстовий пошук FTS5

Як Synapse використовує SQLite FTS5 для повнотекстового пошуку спогадів із затримкою менше мілісекунди.


Повнотекстовий пошук FTS5

Synapse використовує FTS5 (Full-Text Search 5) для швидкого та гнучкого пошуку спогадів. Ця сторінка пояснює, як це працює та як ефективно ним користуватися.

Що таке FTS5?

FTS5 — це розширення SQLite (також доступне в PostgreSQL через розширення), що забезпечує можливості повнотекстового пошуку. Воно:

  • Індексує текстовий вміст для швидкого пошуку за ключовими словами
  • Підтримує булеві оператори (AND, OR, NOT)
  • Підтримує пошук фраз у лапках
  • Підтримує пошук за префіксом з *
  • Ранжує результати за релевантністю

Synapse використовує FTS5 для індексування всього вмісту спогадів, забезпечуючи пошук із затримкою менше мілісекунди серед тисяч спогадів.

Як Synapse використовує FTS5

Коли ви викликаєте POST /memory:

  1. Вміст спогаду зберігається в таблиці memories
  2. Вміст також вставляється у віртуальну таблицю FTS5
  3. FTS5 автоматично токенізує та індексує вміст

Коли ви викликаєте GET /memory/search?q=...:

  1. Synapse розбирає запит із використанням синтаксису FTS5
  2. Виконує MATCH проти індексу FTS5
  3. Фільтрує за mind_id (ізоляція тенантів)
  4. Повертає ранжовані результати

Синтаксис запитів

Простий пошук за ключовим словом

?q=docker

Повертає спогади, що містять «docker».

Кілька ключових слів (неявний AND)

?q=docker+swarm
?q=docker%20swarm

Повертає спогади, що містять ОБИДВА слова «docker» та «swarm».

Пошук фраз

?q="docker+swarm"
?q=%22docker%20swarm%22

Повертає спогади, що містять точну фразу «docker swarm».

Пошук за префіксом

?q=docker*

Повертає спогади зі словами, що починаються на «docker» (напр. «dockers», «dockerfile», «dockerize»).

Булеве OR

?q=docker+OR+kubernetes

Повертає спогади, що містять «docker» АБО «kubernetes».

Булеве NOT

?q=docker+-swarm
?q=docker+NOT+swarm

Повертає спогади, що містять «docker», але НЕ «swarm».

Групування

?q=(docker+OR+kubernetes)+-test

Повертає спогади, що містять «docker» або «kubernetes», але не «test».

Практичні приклади

Пошук спогадів про проєкт

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=synapse+deployment"

Пошук точної фрази

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"

Виключення тестових спогадів

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=production+-test"

Пошук за технологією

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql"

Ранжування

FTS5 ранжує результати за релевантністю за алгоритмом BM25. Фактори:

  • Частота терміна (як часто термін зустрічається)
  • Зворотна частота документа (рідкісні терміни ранжуються вище)
  • Довжина документа (коротші документи з терміном ранжуються вище)
  • Вага колонки (title > content)

Результати повертаються в порядку ранжування (найрелевантніші першими).

Продуктивність

Операція Затримка
Пошук у 100 спогадах < 5мс
Пошук у 1 000 спогадах < 10мс
Пошук у 10 000 спогадах < 25мс
Пошук у 100 000 спогадах < 100мс

FTS5 добре оптимізований для навантажень з переважанням читання.

Обмеження

Стемінг

FTS5 за замовчуванням не робить стемінг. «running» та «run» — різні терміни.

Обхідний шлях: Використовуйте пошук за префіксом: ?q=run*

Толерантність до опечаток

FTS5 не підтримує нечіткий пошук. Опечатка не поверне результатів.

Обхідний шлях: Використовуйте семантичний пошук (/memory/semantic-search) для концептуального зіставлення.

Стоп-слова

Поширені слова (the, a, an, is) індексуються, але можуть бути не корисними для пошуку. FTS5 обробляє це автоматично.

FTS5 проти семантичного пошуку

Аспект FTS5 Семантичний пошук
Швидкість Менше мілісекунди 50-100мс
Зіставлення Точні ключові слова Концептуальне
Толерантність до опечаток Немає Деяка
Стемінг Немає Неявний
Потребує ембеддингів Ні Так
Найкраще для Конкретних термінів Концепцій

Використовуйте FTS5, коли знаєте ключові слова. Використовуйте семантичний пошук, коли потрібні «спогади про X», де X описано інакше.

Найкращі практики

Наступні кроки