Typesense는 즐거운 검색 경험을 구축하기 위한 빠르고 오타 허용 검색 엔진입니다.
오픈 소스 Algolia 대안 &
더욱 사용하기 쉬운 ElasticSearch 대안
웹사이트 | 문서 | 로드맵 | 슬랙 커뮤니티 | 커뮤니티 스레드 | 지저귀다
다음은 대규모 데이터 세트에서 Typesense가 작동하는 모습을 보여주는 몇 가지 라이브 데모 입니다.
? 비디오 시청을 선호하는 경우:
이 목록에 기능이 없나요? 누군가 이미 요청한 경우 이슈 트래커를 검색하고 사용 사례를 설명하는 댓글을 추가하고, 그렇지 않은 경우 새 이슈를 엽니다. 우리는 사용자 피드백을 바탕으로 로드맵의 우선순위를 정하므로 여러분의 의견을 듣고 싶습니다.
Typesense의 공개 로드맵은 다음과 같습니다: https://typesense.link/roadmap.
첫 번째 열에서는 기능 우선순위 지정 방법, 우선순위 지정 및 릴리스 주기에 영향을 미칠 수 있는 방법도 설명합니다.
공개 도메인에서 큰 데이터 세트를 찾을 수 있다면 더 큰 데이터 세트로 벤치마킹하고 싶습니다. 공개된 구조화된 데이터 세트에 대한 제안 사항이 있는 경우 이슈를 열어 알려주시기 바랍니다. 또한 귀하가 보유한 대규모 데이터 세트의 벤치마크를 공유할 수 있다면 기쁠 것입니다. PR을 보내주세요!
Typesense는 다양한 도메인과 업종에 걸쳐 다양한 사용자가 사용합니다.
Typesense Cloud에서는 매월 100억 건 이상의 검색을 제공합니다. Typesense의 Docker 이미지는 1200만 번 이상 다운로드되었습니다.
우리는 최근 쇼케이스에서 누가 그것을 사용하고 있는지 문서화하기 시작했습니다. 목록에 포함하고 싶으시면 SHOWCASE.md를 편집하여 PR을 보내주세요.
Typesense Cloud 홈 페이지에서 사용자 로고 목록도 볼 수 있습니다.
옵션 1: Linux(x86_64 및 arm64) 및 Mac(x86_64)용으로 게시된 바이너리 패키지를 다운로드할 수 있습니다.
옵션 2: 공식 Docker 이미지에서 Typesense를 실행할 수도 있습니다.
옵션 3: Typesense Cloud를 사용하여 관리형 클러스터 가동:
다음은 컬렉션을 생성하고, 문서를 색인화하고, Typesense에서 검색하는 방법을 보여주는 간단한 예입니다.
Docker를 통해 Typesense 서버를 시작하는 것부터 시작해 보겠습니다.
docker run -p 8108:8108 -v/tmp/data:/data typesense/typesense:27.1 --data-dir /data --api-key=Hu52dwsas2AdxdE
몇 가지 언어로 된 API 클라이언트가 있지만 이 예에서는 Python 클라이언트를 사용하겠습니다.
Typesense용 Python 클라이언트를 설치합니다.
pip install typesense
이제 클라이언트를 초기화하고 companies
컬렉션을 만들 수 있습니다.
import typesense
client = typesense . Client ({
'api_key' : 'Hu52dwsas2AdxdE' ,
'nodes' : [{
'host' : 'localhost' ,
'port' : '8108' ,
'protocol' : 'http'
}],
'connection_timeout_seconds' : 2
})
create_response = client . collections . create ({
"name" : "companies" ,
"fields" : [
{ "name" : "company_name" , "type" : "string" },
{ "name" : "num_employees" , "type" : "int32" },
{ "name" : "country" , "type" : "string" , "facet" : True }
],
"default_sorting_field" : "num_employees"
})
이제 방금 만든 컬렉션에 문서를 추가해 보겠습니다.
document = {
"id" : "124" ,
"company_name" : "Stark Industries" ,
"num_employees" : 5215 ,
"country" : "USA"
}
client . collections [ 'companies' ]. documents . create ( document )
마지막으로 방금 인덱싱한 문서를 검색해 보겠습니다.
search_parameters = {
'q' : 'stork' ,
'query_by' : 'company_name' ,
'filter_by' : 'num_employees:>100' ,
'sort_by' : 'num_employees:desc'
}
client . collections [ 'companies' ]. documents . search ( search_parameters )
쿼리 텍스트에서 오타를 발견하셨나요? 별거 아니야. Typesense는 인쇄상의 오류를 즉시 처리합니다!
단계별 안내는 여기 당사 웹사이트에서 확인하실 수 있습니다.
이는 Typesense 서버를 시작하고, 데이터를 인덱싱하고, 데이터 세트를 쿼리하는 과정을 안내합니다.
다음은 당사 웹사이트(https://typesense.org/api)에서 제공되는 공식 API 문서입니다.
문서나 안내에 문제가 있는 경우 여기(https://github.com/typesense/typesense-website)로 알려주시거나 PR을 보내주세요.
CURL을 사용하여 Typesense 서버와 직접 상호 작용할 수 있지만, 우리는 귀하가 선택한 언어에서 Typesense를 사용하여 단순화할 수 있도록 공식 API 클라이언트를 제공합니다. API 클라이언트에는 스마트 재시도 전략이 내장되어 있어 이를 통해 이루어진 API 호출이 특히 HA 설정에서 탄력성을 갖도록 보장합니다.
귀하의 언어로 API 클라이언트를 제공하지 않는 경우에도 널리 사용되는 HTTP 클라이언트 라이브러리를 사용하여 Typesense의 API에 직접 액세스할 수 있습니다.
다음은 커뮤니티 기부 클라이언트 및 통합입니다.
더 많은 공식 클라이언트 라이브러리와 통합을 추가하기 위한 커뮤니티 기여를 환영합니다. 아키텍처에 관해 우리와 협력하려면 [email protected]로 연락하거나 GitHub에서 문제를 열어주세요.
또한 다음과 같은 프레임워크 통합이 있습니다.
커뮤니티에서 관리하는 Postman 컬렉션은 여기(https://github.com/typesense/postman)에 있습니다.
Postman은 터미널에 HTTP 요청을 입력할 필요 없이 가리키고 클릭하여 HTTP 요청을 수행할 수 있게 해주는 앱입니다. 위의 Postman 컬렉션은 Typesense에 대한 API 호출을 빠르게 수행하기 위해 Postman으로 가져올 수 있는 템플릿 요청을 제공합니다.
InstantSearch.js 어댑터를 사용하면 필터링, 정렬, 페이지 매김 등을 갖춘 강력한 검색 환경을 빠르게 구축할 수 있습니다.
방법은 다음과 같습니다: https://typesense.org/docs/guide/search-ui-comComponents.html
Elasticsearch는 설정, 관리, 확장 및 미세 조정에 적지 않은 노력이 필요한 대규모 소프트웨어입니다. 이상적인 구성을 얻기 위해 수천 개의 구성 매개변수를 제공합니다. 따라서 특히 수십억 개의 문서와 페타바이트 규모의 데이터(예: 로그)를 저장해야 하는 경우 프로덕션 준비를 갖추고 정기적으로 모니터링하고 확장할 수 있는 대역폭을 갖춘 대규모 팀에 더 적합합니다.
Typesense는 즐거운 검색 경험을 위해 "시장 출시 시간"을 단축하기 위해 특별히 제작되었습니다. 깔끔하고 잘 문서화된 API, 명확한 의미 체계 및 스마트 기본값을 통해 개발자의 행복과 경험에 초점을 맞춘 가볍지만 강력하고 확장 가능한 대안이므로 많은 손잡이를 돌릴 필요 없이 즉시 사용할 수 있습니다. .
Elasticsearch는 JVM에서도 실행되는데, 그 자체로 최적의 실행을 위해 조정하는 데 상당한 노력이 필요할 수 있습니다. 반면에 Typesense는 하나의 경량 독립형 네이티브 바이너리이므로 설정 및 작동이 간단합니다.
여기에서 단계별 기능 비교를 확인하세요.
Algolia는 비용이 문제가 되지 않을 때 잘 작동하는 독점적이고 호스팅된 서비스형 검색 제품입니다. 우리의 경험에 따르면 빠르게 성장하는 사이트와 앱은 규모가 커짐에 따라 값비싼 요금제 업그레이드와 함께 검색 및 색인 생성 제한에 빠르게 직면합니다.
반면 Typesense는 자체 인프라에서 실행하거나 관리형 SaaS 제품인 Typesense Cloud를 사용할 수 있는 오픈 소스 제품입니다. 오픈 소스 버전은 무료로 사용할 수 있습니다(물론 자체 인프라 비용 제외). Typesense Cloud를 사용하면 기록이나 검색 작업에 따라 비용이 청구되지 않습니다. 대신, 전용 클러스터를 확보하고 처리할 수 있는 만큼의 데이터와 트래픽을 여기에 투입할 수 있습니다. 대부분의 최신 클라우드 플랫폼과 유사하게 선택한 구성에 따라 고정된 시간당 비용 및 대역폭 요금만 지불하면 됩니다.
제품 관점에서 Typesense는 Elasticsearch보다 Algolia에 더 가깝습니다. 그러나 우리는 Algolia의 몇 가지 중요한 제한 사항을 해결했습니다.
Algolia에서는 각 정렬 순서에 대해 별도의 인덱스가 필요하며 이는 계획 한도에 포함됩니다. 검색할 필드, 패싯할 필드, 그룹화할 필드, 순위 설정 등과 같은 대부분의 인덱스 설정은 인덱스가 생성될 때 미리 정의되며 쿼리 시 즉시 설정할 수 있습니다.
Typesense를 사용하면 쿼리 매개변수를 통해 검색 시 이러한 설정을 구성할 수 있으므로 매우 유연하고 새로운 사용 사례가 열립니다. Typesense는 여러 인덱스를 생성하는 대신 단일 인덱스를 사용하여 정렬된 결과를 제공할 수도 있습니다. 이는 메모리 소비를 줄이는 데 도움이 됩니다.
Algolia는 현재 Typesense에 없는 개인화 및 서버 기반 검색 분석 기능을 제공합니다. 분석의 경우 클라이언트 측에서 검색을 계속 계측하고 선택한 웹 분석 도구로 검색 지표를 보낼 수 있습니다.
우리는 Typesense에서 이러한 격차를 해소할 계획이지만, 그 동안 문제 추적기에서 기능 요청을 생성하여 이들 중 귀하의 사용 사례에 대한 쇼 스토퍼가 있는지 알려 주시기 바랍니다.
여기에서 단계별 기능 비교를 확인하세요.
새로운 Typesense 서버는 약 30MB의 메모리를 소비합니다. 문서 색인화를 시작하면 그에 따라 메모리 사용량도 늘어납니다. 증가하는 정도는 인덱싱하는 필드의 수와 유형에 따라 다릅니다.
우리는 인메모리 데이터 구조를 간결하게 유지하기 위해 노력해 왔습니다. 대략적으로 설명하자면, 1백만 개의 Hacker News 타이틀이 해당 포인트와 함께 색인화될 때 Typesense는 165MB의 메모리를 소비합니다. JSON 형식의 디스크에 있는 해당 데이터의 동일한 크기는 88MB입니다. 이 섹션에 추가할 수 있는 자체 데이터 세트의 숫자가 있는 경우 PR을 보내주세요!
우리의 경험에 따르면 기업은 일반적으로 자신이 사용하는 라이브러리가 GPL 라이선스를 받는 경우에 대해 우려합니다. 라이브러리 코드가 코드에 직접 통합되어 파생 작업으로 이어지고 GPL 준수를 유발하기 때문입니다. 그러나 Typesense Server는 서버 소프트웨어 이므로 사용자는 일반적으로 이를 별도의 데몬으로 실행하고 자신의 코드와 통합하지 않을 것으로 예상합니다. GPL은 이 사용 사례를 관대하게 다루고 허용합니다 (예: Linux는 GPL 라이선스를 받았습니다) . 이제 AGPL은 네트워크를 통해 액세스되는 서버 소프트웨어가 GPL이 아닌 파생 작업을 수행하도록 만드는 것입니다. 이러한 이유로 우리는 Typesense에 AGPL을 사용하지 않기로 결정했습니다.
이제 누군가 Typesense 서버를 수정하는 경우 GPL을 사용하면 수정된 코드를 배포하지 않는 한 수정 사항을 그대로 유지할 수 있습니다. 예를 들어 회사는 Typesense 서버를 수정하고 수정된 코드를 내부적으로 실행할 수 있으며 수정된 소프트웨어에 액세스할 수 있는 모든 사람이 수정된 코드를 사용할 수 있도록 하는 한 수정 사항을 오픈 소스로 제공할 필요가 없습니다.
이제 누군가가 Typesense 서버를 수정하고 수정 사항을 배포하는 경우 GPL이 시작됩니다. 우리 작업을 커뮤니티에 게시했다는 점을 고려하면 다른 사람의 수정 사항도 다음의 커뮤니티에 공개되기를 바랍니다. 오픈소스 정신. 우리는 이러한 목적으로 GPL을 사용합니다. 다른 라이센스를 사용하면 오픈 소스 작업을 수정하고, 폐쇄 소스로 만들고, 배포할 수 있지만, 프로젝트의 장기적인 지속 가능성을 위해 Typesense에서는 이를 피하고 싶습니다.
Discourse에서 설명하는 GPL 이유에 대한 자세한 배경은 다음과 같습니다: https://meta.discourse.org/t/why-gnu-license/2531. 거기에 언급된 많은 점들이 우리에게 공감을 불러일으킵니다.
이제 위의 모든 사항은 Typesense 서버에만 적용됩니다. 우리 클라이언트 라이브러리는 실제로 사용자 코드에 통합되도록 되어 있으므로 Apache 라이센스를 사용합니다.
요약하자면, AGPL은 일반적으로 서버 소프트웨어에 문제가 되는 것이므로 우리는 이를 사용하지 않기로 결정했습니다. 우리는 Typesense Server용 GPL이 이 오픈 소스 프로젝트에 대해 우리가 원하는 것의 본질을 포착한다고 믿습니다. GPL은 인기 있는 오픈 소스 프로젝트에서 성공적으로 사용된 오랜 역사를 가지고 있습니다. 우리 라이브러리는 여전히 Apache 라이센스를 보유하고 있습니다.
라이센스 문제로 인해 Typesense를 사용할 수 없는 구체적인 사항이 있는 경우, 이 주제에 대해 더 자세히 알아보도록 하겠습니다. 저희에게 연락해주세요.
Typesense에 대한 일반적인 질문이 있거나 인사를 하고 싶거나 그냥 따라가고 싶다면 공개 Slack 커뮤니티에 참여해 보시기 바랍니다.
문제가 발생하는 경우 GitHub 문제를 생성해 주시면 최선을 다해 도와드리겠습니다.
우리는 GitHub의 이슈 트래커를 통해 좋은 지원을 제공하기 위해 노력하고 있습니다. 그러나 다음을 통해 비공개적이고 우선적인 지원을 받고 싶다면:
당사는 여기에 설명된 유료 지원 옵션을 제공합니다.
우리는 검색 민주화를 목표로 하는 소규모 팀이며 가능한 모든 도움을 받을 것입니다! 참여하고 싶으시다면, 귀하의 도움을 받을 수 있는 곳에 대한 정보가 있습니다: Contributing.md
새 버전이 출시될 때 업데이트를 받으려면 상단의 "보기" 버튼을 클릭하고 "릴리스만"을 선택하세요. 그런 다음 GitHub는 새 릴리스가 나올 때마다 변경 로그와 함께 알림을 보냅니다.
또한 Typesense와 관련된 릴리스 및 추가 주제에 대한 업데이트를 Twitter 계정에 게시합니다. 여기에서 우리를 팔로우하세요: @typesense.
Slack 커뮤니티에도 업데이트를 게시할 예정입니다.
Bazel을 사용하여 Typesense를 구축합니다.
Typesense에는 다음 종속성이 필요합니다.
최신 종속성 세트는 CI 빌드 단계를 참조하세요.
설치한 후에는 저장소 루트에서 다음을 실행하세요.
bazel build //:typesense-server
첫 번째 빌드는 빌드 프로세스의 일부로 다른 타사 라이브러리를 가져와 빌드하므로 시간이 좀 걸립니다.
© 2016-현재 Typesense Inc.