# 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개 메모리 검색 | < 5ms | | 1,000개 메모리 검색 | < 10ms | | 10,000개 메모리 검색 | < 25ms | | 100,000개 메모리 검색 | < 100ms | FTS5는 읽기 중심의 워크로드에 고도로 최적화되어 있습니다. 제한 사항 어간 추출 FTS5는 기본적으로 어간 추출을 하지 않습니다. "running"과 "run"은 다른 용어입니다. 해결 방법: 접두사 매칭 사용: 오타 허용 FTS5는 퍼지 매칭을 지원하지 않습니다. 오타는 결과를 반환하지 않습니다. 해결 방법: 개념 매칭을 위해 의미론적 검색 ()을 사용하십시오. 불용어 일반적인 단어 (the, a, an, is)는 인덱싱되지만 검색에 유용하지 않을 수 있습니다. FTS5는 이를 자동으로 처리합니다. FTS5와 의미론적 검색 비교 | 측면 | FTS5 | 의미론적 검색 | |--------|------|-----------------| | 속도 | 서브밀리초 | 50-100ms | | 매칭 | 정확한 키워드 | 개념적 | | 오타 허용 | 없음 | 약간 | | 어간 추출 | 없음 | 암시적 | | 임베딩 필요 | 아니오 | 예 | | 적합한 용도 | 특정 용어 | 개념 | 키워드를 알 때 FTS5를 사용하십시오. X가 다르게 설명된 "X에 대한 메모리"를 원할 때 의미론적 검색을 사용하십시오. 모범 사례 > [!TIP] > - 구체적인 용어 사용 — "container orchestration"보다 "docker swarm"이 낫습니다 > - 구문 인용 — 은 구문 매칭을 보장합니다 > - 변형을 위해 접두사 사용 — 는 "deploy", "deployment", "deploying"을 잡습니다 > - 노이즈 제외 — 는 테스트 메모리를 필터링합니다 > - 태그와 결합 — 이 결과를 좁힙니다 다음 단계 - 의미론적 검색 - Memory API - 메모리 모범 사례