Typesense 是一个快速、容错的搜索引擎,用于构建令人愉快的搜索体验。
开源 Algolia 替代方案 &
更易于使用的 ElasticSearch 替代方案
网站 |文档 |路线图 | Slack 社区 |社区主题 |叽叽喳喳
以下是几个现场演示,展示了 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 服务器、在其中索引数据以及查询数据集的过程。
以下是我们的官方 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.