Typesense 是一個快速、容錯的搜尋引擎,用於建立令人愉快的搜尋體驗。
開源 Algolia 替代方案 &
更容易使用的 ElasticSearch 替代方案
網站 |文檔 |路線圖 | Slack 社群 |社區主題 |嘰嘰喳喳
以下是幾個現場演示,展示了 Typesense 在大型資料集上的實際應用:
?如果您喜歡觀看影片:
在此列表中沒有看到某個功能?如果有人已經要求,請搜尋我們的問題追蹤器,並向其添加評論以解釋您的用例,如果沒有,則開啟一個新問題。我們根據使用者回饋來確定路線圖的優先順序,因此我們很樂意聽取您的意見。
以下是 Typesense 的公共路線圖:https://typesense.link/roadmap。
第一專欄也解釋了我們如何確定功能的優先順序、您如何影響優先順序和我們的發布節奏。
如果我們能在公共領域找到大型資料集,我們很樂意使用更大的資料集進行基準測試。如果您對開放的結構化資料集有任何建議,請透過提出問題來告知我們。如果您能夠分享您自己的大型資料集的基準,我們也會很高興。請向我們發送 PR!
Typesense 被不同領域和垂直領域的一系列使用者使用。
在 Typesense Cloud 上,我們每月提供超過100 億次搜尋服務。 Typesense 的 Docker 映像下載量已超過 1,200 萬次。
我們最近開始記錄誰在我們的展示櫃中使用它。如果您想加入該列表,請隨時編輯 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 伺服器、在其中索引資料以及查詢資料集的過程。
以下是我們的官方 API 文檔,可在我們的網站上找到:https://typesense.org/api。
如果您發現文件或演練有任何問題,請告知我們或在此處向我們發送 PR:https://github.com/typesense/typesense-website。
雖然您絕對可以使用 CURL 直接與 Typesense Server 交互,但我們提供官方 API 用戶端,以簡化您選擇的語言中 Typesense 的使用。 API 用戶端內建了智慧重試策略,以確保透過它們進行的 API 呼叫具有彈性,尤其是在 HA 設定中。
如果我們不提供您所用語言的 API 用戶端,您仍然可以使用任何流行的 HTTP 用戶端程式庫直接存取 Typesense 的 API。
以下是一些社群貢獻的客戶端和整合:
我們歡迎社群貢獻以添加更多官方客戶端程式庫和整合。請透過 [email protected] 聯絡我們或在 GitHub 上提出問題,與我們就架構進行合作。
我們還有以下框架整合:
我們這裡有一個社區維護的 Postman Collection:https://github.com/typesense/postman。
Postman 是一個應用程序,讓您透過指向和點擊來執行 HTTP 請求,而不必在終端中鍵入它們。上面的 Postman Collection 為您提供了範本請求,您可以將其匯入 Postman,以快速對 Typesense 進行 API 呼叫。
您可以使用我們的 InstantSearch.js 適配器快速建立強大的搜尋體驗,包括篩選、排序、分頁等。
具體方法如下:https://typesense.org/docs/guide/search-ui-components.html
Elasticsearch 是一個大型軟體,需要花費大量精力來設定、管理、擴展和微調。它為您提供了數千個配置參數,以達到您的理想配置。因此,它更適合擁有足夠頻寬使其投入生產、定期監控和擴展的大型團隊,特別是當他們需要儲存數十億文件和 PB 資料(例如:日誌)時。
Typesense 專為縮短「上市時間」而打造,提供令人愉悅的搜尋體驗。它是一個輕量級但功能強大且可擴展的替代方案,專注於開發人員的幸福感和體驗,具有乾淨、記錄齊全的API、清晰的語義和智能默認值,因此它開箱即用,無需轉動許多旋鈕。
Elasticsearch 也在 JVM 上運行,其本身就需要花費相當多的精力才能調整到最佳運行狀態。另一方面,Typesense 是一個輕量級獨立的本機二進位文件,因此設定和操作都很簡單。
請參閱此處的並排功能比較。
Algolia 是一種專有的、已託管的搜尋即服務產品,在成本不是問題的情況下效果很好。根據我們的經驗,快速成長的網站和應用程式很快就會遇到搜尋和索引限制,並伴隨著規模擴大時昂貴的計劃升級。
另一方面,Typesense 是一款開源產品,您可以在自己的基礎架構上運行或使用我們的託管 SaaS 產品 - Typesense Cloud。開源版本可以免費使用(當然除了您自己的基礎設施成本之外)。使用 Typesense Cloud,我們不按記錄或搜尋操作收費。相反,您會獲得一個專用集群,並且可以向其投入其能夠處理的盡可能多的數據和流量。您只需支付固定的每小時成本和頻寬費用,具體取決於您選擇的配置,類似於大多數現代雲端平台。
從產品角度來看,Typesense 在精神上更接近 Algolia,而不是 Elasticsearch。然而,我們已經解決了 Algolia 的一些重要限制:
Algolia 要求每個排序順序都有單獨的索引,這會計入您的計劃限制。大多數索引設定(例如要搜尋的欄位、要分面的欄位、要分組的欄位、排名設定等)都是在建立索引時預先定義的,而不是能夠在查詢時動態設定它們。
使用 Typesense,可以在搜尋時透過查詢參數配置這些設置,這使其非常靈活並解鎖新的用例。 Typesense 還能夠使用單一索引為您提供排序結果,而不必建立多個索引。這有助於減少記憶體消耗。
Algolia 提供了 Typesense 目前不具備的以下功能:個人化和基於伺服器的搜尋分析。對於分析,您仍然可以在客戶端偵測搜尋並將搜尋指標傳送到您選擇的網路分析工具。
我們打算在 Typesense 中彌合這一差距,但與此同時,請透過在我們的問題追蹤器中建立功能請求來告知我們其中是否有任何內容會阻礙您的使用案例。
請參閱此處的並排功能比較。
一個新的 Typesense 伺服器將消耗大約 30 MB 的記憶體。當您開始索引文件時,記憶體使用量將會相應增加。它增加多少取決於您索引的欄位的數量和類型。
我們努力保持記憶體中資料結構的精簡。給您一個粗略的了解:當 100 萬個 Hacker News 標題及其要點被索引時,Typesense 消耗 165 MB 內存。磁碟上 JSON 格式的資料大小相同為 88 MB。如果您有自己資料集中的任何數字,我們可以添加到此部分,請向我們發送 PR!
根據我們的經驗,公司通常會擔心他們使用的函式庫是否獲得 GPL 許可,因為函式庫程式碼直接整合到他們的程式碼中,會導致衍生工作並觸發 GPL 合規性。但是,Typesense Server 是伺服器軟體,我們希望使用者通常將其作為單獨的守護程序運行,而不是將其與自己的程式碼整合。 GPL 慷慨地涵蓋並允許這種用例(例如:Linux 是 GPL 許可的) 。現在,AGPL 使得透過網路存取的伺服器軟體能夠產生衍生作品,而不是 GPL。基於這個原因,我們選擇不將 AGPL 用於 Typesense。
現在,如果有人對 Typesense 伺服器進行修改,GPL 實際上允許您仍然保留修改內容,只要您不分發修改後的程式碼即可。因此,公司可以修改 Typesense 伺服器並在內部運行修改後的程式碼,但仍然不必開源其修改,只要他們將修改後的程式碼提供給有權存取修改後軟體的每個人即可。
現在,如果有人對 Typesense 伺服器進行修改並分發修改,這就是 GPL 發揮作用的地方。為此,我們使用 GPL。其他許可證將允許我們的開源工作被修改、閉源和分發,為了專案的長期可持續性,我們希望使用 Typesense 來避免這種情況。
以下是關於為何使用 GPL 的更多背景信息,如 Discourse 所描述:https://meta.discourse.org/t/why-gnu-license/2531。其中提到的許多觀點引起了我們的共鳴。
現在,以上所有內容僅適用於 Typesense Server。我們的客戶端庫確實是為了整合到我們用戶的程式碼中,因此他們使用 Apache 許可證。
總而言之,AGPL 是伺服器軟體通常會出現問題的地方,我們選擇不使用它。我們相信 Typesense Server 的 GPL 抓住了我們想要這個開源專案的本質。 GPL 有著被流行的開源專案成功使用的悠久歷史。我們的庫仍然獲得 Apache 許可。
如果您因許可問題而無法使用 Typesense,我們很樂意與您進一步探討此主題。請聯絡我們。
如果您有關於 Typesense 的一般性問題,想要打個招呼或只是繼續關注,我們想邀請您加入我們的公共 Slack 社區。
如果您遇到任何問題,請建立 GitHub 問題,我們將盡力提供協助。
我們努力透過 GitHub 上的問題追蹤器提供良好的支援。但是,如果您想獲得私人和優先支援:
我們提供此處描述的付費支援選項。
我們是一支精幹團隊,肩負著使搜尋民主化的使命,我們將竭盡全力提供協助!如果您想參與其中,這裡有關於我們可以在哪裡使用您的幫助的資訊:Contributing.md
如果您想在我們發布新版本時取得更新,請點擊頂部的「觀看」按鈕並選擇「僅發布」。然後,GitHub 會向您發送通知以及每個新版本的變更日誌。
我們也會在 Twitter 帳戶上發布有關 Typesense 相關版本和其他主題的更新。在這裡關注我們:@typesense。
我們也將在 Slack 社群上發布更新。
我們使用 Bazel 來建立 Typesense。
Typesense 需要以下依賴項:
請參閱 CI 建置步驟以取得最新的相依性集。
安裝它們後,從儲存庫的根目錄執行以下命令:
bazel build //:typesense-server
第一次建置將需要一些時間,因為其他第三方程式庫是在建置過程中拉取和建置的。
© 2016 年至今 Typesense Inc.