Posted in

ZincSearch – 轻量级全文搜索引擎(Elasticsearch替代品)

文章封面

前言-为什么需要Zincsearch

最近想给博客加上搜索功能,要求是效果好、资源占用小,手动[滑稽],作为一个喜欢折腾的人,就是想既要又要,这也是为什么我需要Zincsearch了

想起了之前做项目的时候,要想有一个效果比较好的检索功能,Elasticsearch基本算是标配了。但是之前用的是公司的服务器,对于资源这一块根本没太过在意,主打一个财大气粗。但是换成自己的轻量级服务器,就变得抠抠搜搜的了,于是去Elasticsearch官网看了一下推荐配置,这不看不知道,一看给我吓一跳,官方推荐配置:至少4核,32G,这不是要了老命嘛,于是不得不寻找高性价比平替了。

选型-为什么选zincsearch

选型阶段其实目标已经非常明确了,找了一下市面上稍有名气一点的搜索引擎:

Meilisearch

特性:

  1. 用Rust编写,速度快
  2. 官方提供docker部署方案
  3. 有比较不错的Web UI
  4. 有REST API
  5. 可以自动处理Typo

缺点:

  1. 不支持复杂聚合查询

推荐配置:

  1. CPU越多约好(官方没有给明确的数据)
  2. 内存为存储索引的2-3倍,也就是说,如果索引1G,那么需要2-3G的内存
  3. 存储推荐SSD,容量建议是原始数据的 10 倍

总结:一个还不错的搜索引擎,基本可以初期生产了,对于个人开发者来说能够够得上,用户友好,能用级别。

Zincsearch

特性:

  1. 用Go编写,编译后为单文件,方便部署
  2. 官方提供docker部署方案
  3. 有简陋的Web UI
  4. 有REST API

缺点:

  1. 不支持复杂聚合查询
  2. 集群能力弱
  3. 索引与搜索性能不稳定
  4. 并发查询能力差

推荐配置:

  1. 2CPU
  2. 4G内存
  3. SSD最好

总结:性价比超高,性能要求低于Meilisearch,对于个人开发这的小项目来说比较适合,可用级别。

Typesense

特性:

  1. C++编写
  2. 支持结构化搜索
  3. 支持向量搜索和混合搜索

推荐配置:

  1. 至少2vCPU
  2. 内存为存储索引的2-3倍,也就是说,如果索引1G,那么需要2-3G的内存
  3. SSD,容量至少为原始数据大小,建议使用 NVMe SSD 以降低延迟

总结:资源要求情况与Meilisearch差不多,适合有结构化搜索要求的场景,能用级别。

我还看了一下Lucene、OpenSearch,由于都是JAVA写的,直接放弃,这里就不对比了;还有Python写的Whoosh,由于属于试验阶段,也放弃了。

综上,我选择了Zincsearch,搜索效果还成,我也用不上那么复杂的搜索场景,关键是:资源占用小,性价比高。

如何安装Zincsearch

选型完成之后,就可以进入安装阶段了,这里选择使用docker安装,既方便又快速,而且还很干净。我的服务器为Ubuntu22.04, 安装前需要先安装docker,可以自行根据服务器版本来安装:

地址:https://docs.docker.com/get-started/get-docker/

我是用的docker compose安装的,这里也贴一下我的docker-compose.yaml:

services:
  zincsearch:
    image: public.ecr.aws/zinclabs/zincsearch:latest
    environment:
      - "ZINC_DATA_PATH=/data"
      - "ZINC_FIRST_ADMIN_USER=admin"
      - "ZINC_FIRST_ADMIN_PASSWORD=文字替换为密码"
    container_name: "zincsearch"
    restart: always
    volumes:
      - ./data:/data
    ports:
      - "4080"

在docker-compose.yaml所在的目录运行一下 docker compose up -d,服务就启动了

在浏览器运行http://localhost:4080/就可以看到登录界面了:

输入上面的用户名和密码即可登录了。

文章来自:https://apksilo.com

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注