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. FTS5 인덱스에 대해 MATCH를 실행합니다
  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개 메모리 검색 < 5ms
1,000개 메모리 검색 < 10ms
10,000개 메모리 검색 < 25ms
100,000개 메모리 검색 < 100ms

FTS5는 읽기 중심의 워크로드에 고도로 최적화되어 있습니다.

제한 사항

어간 추출

FTS5는 기본적으로 어간 추출을 하지 않습니다. "running"과 "run"은 다른 용어입니다.

해결 방법: 접두사 매칭 사용: ?q=run*

오타 허용

FTS5는 퍼지 매칭을 지원하지 않습니다. 오타는 결과를 반환하지 않습니다.

해결 방법: 개념 매칭을 위해 의미론적 검색 (/memory/semantic-search)을 사용하십시오.

불용어

일반적인 단어 (the, a, an, is)는 인덱싱되지만 검색에 유용하지 않을 수 있습니다. FTS5는 이를 자동으로 처리합니다.

FTS5와 의미론적 검색 비교

측면 FTS5 의미론적 검색
속도 서브밀리초 50-100ms
매칭 정확한 키워드 개념적
오타 허용 없음 약간
어간 추출 없음 암시적
임베딩 필요 아니오
적합한 용도 특정 용어 개념

키워드를 알 때 FTS5를 사용하십시오. X가 다르게 설명된 "X에 대한 메모리"를 원할 때 의미론적 검색을 사용하십시오.

모범 사례

다음 단계