{"title":"Wyszukiwanie pełnotekstowe FTS5","slug":"fts5-search","category":"concepts","summary":"Jak Synapse wykorzystuje SQLite FTS5 do wyszukiwania wspomnień poniżej milisekundy.","audience":["human","llm"],"tags":["concept","search","fts5","fulltext"],"difficulty":"advanced","updated":"2026-06-27","word_count":573,"read_minutes":3,"lang":"pl","translated":true,"requested_lang":"pl","content_markdown":"\n# Wyszukiwanie pełnotekstowe FTS5\n\nSynapse używa FTS5 (Full-Text Search 5) do szybkiego i elastycznego wyszukiwania\nwspomnień. Ta strona wyjaśnia, jak to działa i jak efektywnie tego używać.\n\n## Czym jest FTS5?\n\nFTS5 to rozszerzenie SQLite (dostępne również w PostgreSQL przez rozszerzenia),\nktóre zapewnia możliwości wyszukiwania pełnotekstowego. Spełnia funkcje:\n\n- Indeksuje treść tekstową pod kątem szybkiego wyszukiwania słów kluczowych\n- Obsługuje operatory logiczne (AND, OR, NOT)\n- Obsługuje dopasowywanie fraz z cudzysłowami\n- Obsługuje dopasowywanie prefiksów z `*`\n- Ranguje wyniki według trafności\n\nSynapse używa FTS5 do indeksowania całej treści wspomnień, co umożliwia\nwyszukiwanie poniżej milisekundy w tysiącach wspomnień.\n\n## Jak Synapse używa FTS5\n\nGdy wykonywane jest `POST /memory`:\n\n1. Treść wspomnienia jest zapisywana w tabeli `memories`\n2. Treść jest również wstawiana do tabeli wirtualnej FTS5\n3. FTS5 automatycznie tokenizuje i indeksuje treść\n\nGdy wykonywane jest `GET /memory/search?q=...`:\n\n1. Synapse parsuje zapytanie składnią FTS5\n2. Wykonuje `MATCH` wobec indeksu FTS5\n3. Filtruje po `mind_id` (izolacja dzierżawcy)\n4. Zwraca wyniki z rankingiem\n\n## Składnia zapytania\n\n### Proste wyszukiwanie słów kluczowych\n\n```\n?q=docker\n```\n\nZwraca wspomnienia zawierające „docker\".\n\n### Wiele słów kluczowych (domyślnie AND)\n\n```\n?q=docker+swarm\n?q=docker%20swarm\n```\n\nZwraca wspomnienia zawierające ZARÓWNO „docker\", JAK i „swarm\".\n\n### Dopasowywanie fraz\n\n```\n?q=\"docker+swarm\"\n?q=%22docker%20swarm%22\n```\n\nZwraca wspomnienia zawierające dokładną frazę „docker swarm\".\n\n### Dopasowywanie prefiksów\n\n```\n?q=docker*\n```\n\nZwraca wspomnienia zawierające słowa zaczynające się od „docker\" (np. „dockers\",\n„dockerfile\", „dockerize\").\n\n### Operator logiczny OR\n\n```\n?q=docker+OR+kubernetes\n```\n\nZwraca wspomnienia zawierające „docker\" LUB „kubernetes\".\n\n### Operator logiczny NOT\n\n```\n?q=docker+-swarm\n?q=docker+NOT+swarm\n```\n\nZwraca wspomnienia zawierające „docker\", ale NIE „swarm\".\n\n### Grupowanie\n\n```\n?q=(docker+OR+kubernetes)+-test\n```\n\nZwraca wspomnienia zawierające „docker\" lub „kubernetes\", ale nie „test\".\n\n## Praktyczne przykłady\n\n### Znajdowanie wspomnień o projekcie\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=synapse+deployment\"\n```\n\n### Znajdowanie dokładnej frazy\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22\"\n```\n\n### Wykluczanie wspomnień testowych\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=production+-test\"\n```\n\n### Wyszukiwanie po technologii\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql\"\n```\n\n## Ranking\n\nFTS5 ranguje wyniki pod kątem trafności algorytmem BM25. Czynniki:\n\n- Częstotliwość terminu (jak często występuje)\n- Odwrotna częstotliwość dokumentu (rzadsze terminy mają wyższy ranking)\n- Długość dokumentu (krótsze dokumenty z terminem mają wyższy ranking)\n- Waga kolumny (tytuł > treść)\n\nWyniki są zwracane w kolejności rangi (najbardziej trafne najpierw).\n\n## Wydajność\n\n| Operacja | Opóźnienie |\n|-----------|---------|\n| Wyszukiwanie 100 wspomnień | < 5 ms |\n| Wyszukiwanie 1 000 wspomnień | < 10 ms |\n| Wyszukiwanie 10 000 wspomnień | < 25 ms |\n| Wyszukiwanie 100 000 wspomnień | < 100 ms |\n\nFTS5 jest wysoce zoptymalizowany dla obciążeń odczytu.\n\n## Ograniczenia\n\n### Stemming\n\nFTS5 domyślnie nie wykonuje stemmingu. „Running\" i „run\" to różne terminy.\n\n**Obejście:** Użyć dopasowania prefiksu: `?q=run*`\n\n### Tolerancja literówek\n\nFTS5 nie obsługuje dopasowywania rozmytego. Literówka zwróci brak wyników.\n\n**Obejście:** Użyć wyszukiwania semantycznego (`/memory/semantic-search`) do\ndopasowywania koncepcyjnego.\n\n### Słowa stop\n\nPopularne słowa (the, a, an, is) są indeksowane, ale mogą nie być użyteczne w\nwyszukiwaniu. FTS5 obsługuje to automatycznie.\n\n## FTS5 a wyszukiwanie semantyczne\n\n| Aspekt | FTS5 | Wyszukiwanie semantyczne |\n|--------|------|-----------------|\n| Prędkość | Poniżej milisekundy | 50-100 ms |\n| Dopasowywanie | Dokładne słowa kluczowe | Koncepcyjne |\n| Tolerancja literówek | Brak | Pewna |\n| Stemming | Brak | Domniemany |\n| Wymaga osadzeń | Nie | Tak |\n| Najlepsze do | Konkretnych terminów | Koncepcji |\n\nNależy używać FTS5, gdy znane są słowa kluczowe. Wyszukiwanie semantyczne należy\nstosować, gdy potrzebne są „wspomnienia o X\", gdzie X jest opisane inaczej.\n\n## Najlepsze praktyki\n\n> [!TIP]\n> - **Używać konkretnych terminów** — „docker swarm\" jest lepsze niż „container orchestration\"\n> - **Cytować frazy** — `\"docker swarm\"` zapewnia dopasowanie frazy\n> - **Używać prefiksu dla wariantów** — `deploy*` wyłapuje „deploy\", „deployment\", „deploying\"\n> - **Wykluczać szum** — `-test` odfiltrowuje wspomnienia testowe\n> - **Łączyć z tagami** — `?q=docker&tag=production` zawęża wyniki\n\n## Następne kroki\n\n- [Wyszukiwanie semantyczne](/docs/concepts/semantic-search)\n- [Memory API](/docs/api/memory)\n- [Najlepsze praktyki pamięci](/docs/guides/memory-best-practices)\n","content_html":"<h1>Wyszukiwanie pełnotekstowe FTS5</h1>\n<p>Synapse używa FTS5 (Full-Text Search 5) do szybkiego i elastycznego wyszukiwania\nwspomnień. Ta strona wyjaśnia, jak to działa i jak efektywnie tego używać.</p>\n<h2>Czym jest FTS5?</h2>\n<p>FTS5 to rozszerzenie SQLite (dostępne również w PostgreSQL przez rozszerzenia),\nktóre zapewnia możliwości wyszukiwania pełnotekstowego. Spełnia funkcje:</p>\n<ul>\n<li>Indeksuje treść tekstową pod kątem szybkiego wyszukiwania słów kluczowych</li>\n<li>Obsługuje operatory logiczne (AND, OR, NOT)</li>\n<li>Obsługuje dopasowywanie fraz z cudzysłowami</li>\n<li>Obsługuje dopasowywanie prefiksów z <code>*</code></li>\n<li>Ranguje wyniki według trafności</li>\n</ul>\n<p>Synapse używa FTS5 do indeksowania całej treści wspomnień, co umożliwia\nwyszukiwanie poniżej milisekundy w tysiącach wspomnień.</p>\n<h2>Jak Synapse używa FTS5</h2>\n<p>Gdy wykonywane jest <code>POST /memory</code>:</p>\n<ol>\n<li>Treść wspomnienia jest zapisywana w tabeli <code>memories</code></li>\n<li>Treść jest również wstawiana do tabeli wirtualnej FTS5</li>\n<li>FTS5 automatycznie tokenizuje i indeksuje treść</li>\n</ol>\n<p>Gdy wykonywane jest <code>GET /memory/search?q=...</code>:</p>\n<ol>\n<li>Synapse parsuje zapytanie składnią FTS5</li>\n<li>Wykonuje <code>MATCH</code> wobec indeksu FTS5</li>\n<li>Filtruje po <code>mind_id</code> (izolacja dzierżawcy)</li>\n<li>Zwraca wyniki z rankingiem</li>\n</ol>\n<h2>Składnia zapytania</h2>\n<h3>Proste wyszukiwanie słów kluczowych</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker</code></pre><p>Zwraca wspomnienia zawierające „docker&quot;.</p>\n<h3>Wiele słów kluczowych (domyślnie AND)</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+swarm\n?q=docker%20swarm</code></pre><p>Zwraca wspomnienia zawierające ZARÓWNO „docker&quot;, JAK i „swarm&quot;.</p>\n<h3>Dopasowywanie fraz</h3>\n<pre><code class=\"hljs language-plaintext\">?q=&quot;docker+swarm&quot;\n?q=%22docker%20swarm%22</code></pre><p>Zwraca wspomnienia zawierające dokładną frazę „docker swarm&quot;.</p>\n<h3>Dopasowywanie prefiksów</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker*</code></pre><p>Zwraca wspomnienia zawierające słowa zaczynające się od „docker&quot; (np. „dockers&quot;,\n„dockerfile&quot;, „dockerize&quot;).</p>\n<h3>Operator logiczny OR</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+OR+kubernetes</code></pre><p>Zwraca wspomnienia zawierające „docker&quot; LUB „kubernetes&quot;.</p>\n<h3>Operator logiczny NOT</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+-swarm\n?q=docker+NOT+swarm</code></pre><p>Zwraca wspomnienia zawierające „docker&quot;, ale NIE „swarm&quot;.</p>\n<h3>Grupowanie</h3>\n<pre><code class=\"hljs language-plaintext\">?q=(docker+OR+kubernetes)+-test</code></pre><p>Zwraca wspomnienia zawierające „docker&quot; lub „kubernetes&quot;, ale nie „test&quot;.</p>\n<h2>Praktyczne przykłady</h2>\n<h3>Znajdowanie wspomnień o projekcie</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=synapse+deployment&quot;</span></code></pre><h3>Znajdowanie dokładnej frazy</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22&quot;</span></code></pre><h3>Wykluczanie wspomnień testowych</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=production+-test&quot;</span></code></pre><h3>Wyszukiwanie po technologii</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql&quot;</span></code></pre><h2>Ranking</h2>\n<p>FTS5 ranguje wyniki pod kątem trafności algorytmem BM25. Czynniki:</p>\n<ul>\n<li>Częstotliwość terminu (jak często występuje)</li>\n<li>Odwrotna częstotliwość dokumentu (rzadsze terminy mają wyższy ranking)</li>\n<li>Długość dokumentu (krótsze dokumenty z terminem mają wyższy ranking)</li>\n<li>Waga kolumny (tytuł &gt; treść)</li>\n</ul>\n<p>Wyniki są zwracane w kolejności rangi (najbardziej trafne najpierw).</p>\n<h2>Wydajność</h2>\n<table>\n<thead>\n<tr>\n<th>Operacja</th>\n<th>Opóźnienie</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Wyszukiwanie 100 wspomnień</td>\n<td>&lt; 5 ms</td>\n</tr>\n<tr>\n<td>Wyszukiwanie 1 000 wspomnień</td>\n<td>&lt; 10 ms</td>\n</tr>\n<tr>\n<td>Wyszukiwanie 10 000 wspomnień</td>\n<td>&lt; 25 ms</td>\n</tr>\n<tr>\n<td>Wyszukiwanie 100 000 wspomnień</td>\n<td>&lt; 100 ms</td>\n</tr>\n</tbody></table>\n<p>FTS5 jest wysoce zoptymalizowany dla obciążeń odczytu.</p>\n<h2>Ograniczenia</h2>\n<h3>Stemming</h3>\n<p>FTS5 domyślnie nie wykonuje stemmingu. „Running&quot; i „run&quot; to różne terminy.</p>\n<p><strong>Obejście:</strong> Użyć dopasowania prefiksu: <code>?q=run*</code></p>\n<h3>Tolerancja literówek</h3>\n<p>FTS5 nie obsługuje dopasowywania rozmytego. Literówka zwróci brak wyników.</p>\n<p><strong>Obejście:</strong> Użyć wyszukiwania semantycznego (<code>/memory/semantic-search</code>) do\ndopasowywania koncepcyjnego.</p>\n<h3>Słowa stop</h3>\n<p>Popularne słowa (the, a, an, is) są indeksowane, ale mogą nie być użyteczne w\nwyszukiwaniu. FTS5 obsługuje to automatycznie.</p>\n<h2>FTS5 a wyszukiwanie semantyczne</h2>\n<table>\n<thead>\n<tr>\n<th>Aspekt</th>\n<th>FTS5</th>\n<th>Wyszukiwanie semantyczne</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Prędkość</td>\n<td>Poniżej milisekundy</td>\n<td>50-100 ms</td>\n</tr>\n<tr>\n<td>Dopasowywanie</td>\n<td>Dokładne słowa kluczowe</td>\n<td>Koncepcyjne</td>\n</tr>\n<tr>\n<td>Tolerancja literówek</td>\n<td>Brak</td>\n<td>Pewna</td>\n</tr>\n<tr>\n<td>Stemming</td>\n<td>Brak</td>\n<td>Domniemany</td>\n</tr>\n<tr>\n<td>Wymaga osadzeń</td>\n<td>Nie</td>\n<td>Tak</td>\n</tr>\n<tr>\n<td>Najlepsze do</td>\n<td>Konkretnych terminów</td>\n<td>Koncepcji</td>\n</tr>\n</tbody></table>\n<p>Należy używać FTS5, gdy znane są słowa kluczowe. Wyszukiwanie semantyczne należy\nstosować, gdy potrzebne są „wspomnienia o X&quot;, gdzie X jest opisane inaczej.</p>\n<h2>Najlepsze praktyki</h2>\n<div class=\"callout callout-ok\"></div><h2>Następne kroki</h2>\n<ul>\n<li><a href=\"/docs/concepts/semantic-search\">Wyszukiwanie semantyczne</a></li>\n<li><a href=\"/docs/api/memory\">Memory API</a></li>\n<li><a href=\"/docs/guides/memory-best-practices\">Najlepsze praktyki pamięci</a></li>\n</ul>\n","urls":{"html":"/docs/concepts/fts5-search","text":"/docs/concepts/fts5-search?format=text","json":"/docs/concepts/fts5-search?format=json","llm":"/docs/concepts/fts5-search?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}