Typesense 개요
Typesense 개요
Typesense는 속도와 개발자 경험에 집중한 오픈소스 검색 엔진이에요. C++로 작성되어 단일 노드에서도 낮은 지연으로 반응하고, 오타 허용 검색, 동의어, 패싯, 벡터 검색을 간단한 REST API로 제공해요. Elasticsearch보다 가볍게, 하지만 상용 검색 엔진 수준의 기능을 원할 때 잘 어울리는 선택이에요.
핵심 개념
Typesense의 데이터 모델은 크게 컬렉션(collection)과 도큐먼트(document)로 이뤄져요. 컬렉션은 도큐먼트의 묶음이고, 검색 요청은 특정 컬렉션을 대상으로 해요. 각 컬렉션은 검색에 사용할 필드와 타입을 정의하는 스키마를 가져요. 가장 빠른 시작 방법은 Docker로 Typesense 서버를 띄우고, 컬렉션을 만들고, 도큐먼트를 넣고, 검색 API를 호출하는 순서예요.
설치와 서버 실행
Docker로 서버를 띄우는 가장 흔한 방식이에요. 다음 환경변수를 지정해서 실행합니다.
docker run -p 8108:8108 -v/tmp/data:/data typesense/typesense:0.25.1 \
--data-dir /data --api-key=xyz --enable-cors
여기서 --api-key는 인증에 쓰는 API 키고, --enable-cors는 브라우저에서 직접 호출할 때 필요해요. 서버가 뜨면 API 키를 X-TYPESENSE-API-KEY 헤더로 보내서 요청을 인증해요.
컬렉션 만들기
컬렉션을 만들 때 필드 스키마를 함께 지정해요. sort와 facet 같은 속성은 검색 성능에 영향을 주는 옵션이에요.
curl 'http://localhost:8108/collections' \
-H 'X-TYPESENSE-API-KEY: xyz' \
-d '{
"name": "companies",
"fields": [
{"name": "company_name", "type": "string"},
{"name": "num_employees", "type": "int32"},
{"name": "country", "type": "string", "facet": true}
]
}'
도큐먼트 넣기와 검색
도큐먼트를 넣은 뒤에는 검색 엔드포인트로 검색해요. Typesense는 오타 허용 검색이 기본이고, 쿼리 파라미터로 검색 제어를 하죠.
curl 'http://localhost:8108/collections/companies/documents/search?q=starbuck&query_by=company_name'
q는 검색어고 query_by는 검색할 필드를 지정해요. 검색 결과는 hits 배열로 돌아오고 각 히트는 매칭된 도큐먼트와 관련도 점수를 담아요.