搜索百科(6):Meilisearch — Rust 打造的轻量级搜索新锐

news/2025/11/2 23:13:27/文章来源:https://www.cnblogs.com/infinilabs/p/19185624

大家好,我是 INFINI Labs 的石阳。

欢迎关注 《搜索百科》 专栏!每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。

在之前的几期中,我们认识了搜索技术的基石 Lucene、企业级搜索先锋 Solr、搜索界的“流量明星” Elasticsearch 以及它的分叉兄弟 OpenSearch 和 ES 国产替代方案 Easysearch。它们大多基于 Lucene 构建,形成了庞大且功能丰富的生态。

今天,我们将介绍一位“非主流”选手:一款基于 Rust 编写、主打“”和“简单”的现代搜索引擎——Meilisearch。它以全新的姿态,为开发者带来了不同的搜索体验。

Meilisearch 概述

Meilisearch 是一款开源的、用 Rust 编写的即时搜索引擎。它提供了一个快速、轻量且可定制的搜索 API,旨在为用户提供毫秒级的搜索体验。

它的核心优势在于为应用内搜索电商搜索等对延迟敏感的场景提供了出色的用户体验。

  • 首次发布:2020 年
  • 最新版本:1.24.0(截止 2025 年 10 月)
  • 核心语言:Rust
  • 开源协议:MIT License
  • 官方网址:https://www.meilisearch.com/
  • GitHub 仓库:https://github.com/meilisearch/meilisearch

诞生故事

Meilisearch 的故事始于 2018 年,当时法国工程师 Quentin de Quelen 在开发一个电商项目时,发现现有的搜索引擎要么太重量级,要么配置太复杂。他想要一个"开箱即用"的搜索解决方案,能够快速集成到应用中,并提供优秀的搜索体验。

于是,他决定用 Rust 语言从头编写一个搜索引擎。选择 Rust 是因为其出色的性能、内存安全性和并发能力,非常适合构建高性能的搜索核心。

项目最初只是一个内部工具,但随着功能的完善和社区的反馈,Meilisearch 在 2019 年正式开源,并迅速获得了开发者的青睐。2020 年,团队获得了 150 万美元的种子轮融资,正式成立了 Meilisearch 公司。

核心特性

Meilisearch 在设计上做了大量的取舍,专注于核心的搜索功能,但做到了极致。

  • 极速响应:核心目标是实现 50 毫秒以下的响应时间,即使在大型数据集中也能提供“所见即所得”的搜索体验。
  • 零配置:开箱即用,部署和索引数据都非常简单,不需要预定义 Schema 或复杂的配置文件。
  • 相关的默认值:内置一个强大的 相关性排名(Relevance Ranking) 算法,结合 Typos(拼写错误)、Word Proximity(词语距离)和 Attributes(字段权重)等因素,无需额外调优即可获得高质量的搜索结果。
  • 语言无关性:支持多种语言的分词与搜索,能很好地处理中文、日文等非拉丁语系文本。
  • 无分布式架构:为了追求极致的速度和简单性,Meilisearch 被设计为单机搜索引擎,不支持开箱即用的分布式集群,这简化了运维,但也限制了其 PB 级数据的处理能力。

对比优势:Meilisearch vs Lucene/ES 体系

Meilisearch 与基于 Lucene 的 Elasticsearch 体系,在设计哲学上有着本质区别:

特性 Meilisearch Elasticsearch
核心目标 极速的应用内搜索体验 分布式搜索、日志分析、可观测性
基础架构 单机、轻量级 分布式集群(主从节点、分片)
核心语言 Rust Java(基于 Lucene)
性能瓶颈 单机 CPU / 内存限制 分布式协调开销
上手难度 简单,开箱即用,REST API 相对复杂,需要了解集群、分片等概念
数据规模 适合中小型数据集(GB 级别) 适合大型和超大型数据集(TB/PB 级别)
全文检索 依赖内置的强相关性算法 依赖 Lucene 强大的分词、查询解析器

总结:

  • 如果你的应用需要超低延迟简单部署、数据量在 GB 级别,并且搜索是应用的核心功能,Meilisearch 是一个极佳的选择。
  • 如果你的需求涉及日志分析大规模数据存储集群高可用和复杂的聚合分析,那么 Elasticsearch 仍然是更成熟和全面的解决方案。

快速上手:5 分钟体验 Meilisearch

部署 Meilisearch 非常简单,你甚至不需要 Docker,只需一个命令即可运行。

1. 运行 Meilisearch

# 安装 Meilisearch
curl -L https://install.meilisearch.com | sh
# 启动 Meilisearch
meilisearch --master-key 'aStrongMasterKey'# 或使用 Docker
docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest --master-key 'aStrongMasterKey'

2. 添加索引(创建 Index)

Meilisearch 不需要预先定义索引结构(Schema-less)。

curl -X POST 'http://localhost:7700/indexes' \-H 'Authorization: Bearer aStrongMasterKey' \-H 'Content-Type: application/json' \--data-binary '{"uid": "movies","primaryKey": "id"
}'

3. 索引文档(添加 Documents)

curl -X POST 'http://localhost:7700/indexes/movies/documents' \-H 'Authorization: Bearer aStrongMasterKey' \-H 'Content-Type: application/json' \--data-binary '[{"id": 1, "title": "泰坦尼克号", "genres": ["剧情", "爱情"]},{"id": 2, "title": "黑客帝国", "genres": ["科幻", "动作"]}
]'

4. 执行搜索

# 搜索关键词 "泰坦"
curl -X GET 'http://localhost:7700/indexes/movies/search?q=泰坦'

返回结果:

{"hits": [{"id": 1,"title": "泰坦尼克号","genres": ["剧情", "爱情"]}],"offset": 0,"limit": 20,"estimatedTotalHits": 1,"processingTimeMs": 1,"query": "泰坦"
}

注意 processingTimeMs: 1,这是 Meilisearch 速度的最好证明!

5. 场景演示

结语

Meilisearch 的出现,代表了新一代搜索引擎对于开发者体验即时性的追求。它在应用内搜索领域展现了强大的竞争力,证明了不必依赖 Lucene 的庞大体系,也能打造出极致性能的搜索产品。

虽然它还无法完全取代 Elasticsearch 在日志分析、可观测性等大型分布式场景的地位,但在许多新兴应用和对搜索速度有极高要求的场景中,它无疑是一个值得尝试的开源新星。

🚀 下期预告

下一篇我们将把目光转向搜索领域的云端先锋 —— Algolia。作为搜索即服务(Search-as-a-Service)的开创者,Algolia 如何以其卓越的 API 设计、惊人的搜索速度和精准的相关性排序,重新定义云端搜索体验?

💬 三连互动

  1. 你会把 ES/Solr 换成 Meilisearch 吗?
  2. 在你的应用中,搜索延迟达到多少毫秒你会觉得无法接受?
  3. 在什么场景下你会考虑使用 Meilisearch 而不是 Elasticsearch?

对搜索技术感兴趣的朋友,也欢迎加我微信(ID:lsy965145175)备注“搜索百科”,拉你进  搜索技术交流群,一起探讨与学习!

推荐阅读

  • 搜索百科(5):Easysearch — 自主可控的国产分布式搜索引擎
  • 搜索百科(4):OpenSearch — 开源搜索的新选择
  • 搜索百科(3):Elasticsearch — 搜索界的"流量明星"
  • 搜索百科(2):Apache Solr — 企业级搜索的开源先锋
  • 搜索百科(1):Lucene — 打开现代搜索世界的第一扇门

🔗 参考资源

  • Meilisearch 官方文档
  • Meilisearch vs Elasticsearch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/953877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程--团队作业

作业信息:这个作业属于哪个课程 首页 - 计科23级34班 - 广东工业大学 - 班级博客 - 博客园这个作业要求在哪里 团队作业1——团队展示&选题 - 作业 - 计科23级34班 - 班级博客 - 博客园这个作业的目标 组建团队 ; …

C++练习1

#include <stdio.h>struct complex{int real;int imag; };//结构体定义:分为实部和虚部struct complex multiply(struct complex x, struct complex y); //函数声明 int main() {struct complex product, x, y;…

2025.11.2总结

今天继续软考的学习,学设计模式的时候学不动了,稍微记一下三大类,23种,创建型5种,结构型7种,行为型11种。还行 创建型五种,也记住了工厂方法模式,抽象工厂模式,建造者模式,原型,单例模式。概念过了一遍,背…

第二届数证杯初赛-计算机取证

第二届数证杯初赛 容器密码:GQ7aXryvOCM8qGeXa19K9g&jtHSGtrimps@QxaYt4oRwwKHeN0A$#EPv*u 计算机取证分析 请根据计算机检材…

视频瘦身大师

视频瘦身大师 一、作业基本信息 项目名称:视频瘦身大师这个项目属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/作业要求 https://edu.cnblogs.com/campus/gdgy/Class34Grade23Com…

如何把应用程序的图标都摆在xfce的panel上

如何把应用程序的图标都摆在xfce的panel上鼠标右键——面板首选项——项目,可以添加多个启动器。 每个启动器的属性里可以添加多个应用程序。如果应用程序过多(比如3个),就会显示上箭头。

claude_code_clone

claude_code_clone https://github.com/fanqingsong/claude_code_cloneClaude-Code-Clone — LangGraph CLI Coding agentA compact, runnable Python project that reconstructs a demo agent using LangGraph, LangC…

CF2035E

有两种操作,第一种代价 \(x\),第二种 \(y\)。在不能连续进行 \(1\) 操作 \(k\) 次的情况下,问至少需要多少代价才能打出至少 \(z\) 点伤害。使攻击力 \(d\) 加 \(1\)(初始为 \(0\))。 打出 \(d\) 点伤害。\(1 \le…

puty总是自动断开连接,修改配置即可

然后接下来是重点,你需要点击Session,并且选择Default Sessions,然后点旁边的保存才可以, 要不然根本保存不下来,小坑

读《纳瓦尔宝典》之判断力:一

其言 1、真正聪明的人,从不走捷径 2、判断力定义:知道个人行为的长期后果,用于解决外部问题的智慧 3、真正的知识具有内在的关联性 4、要直面现实,就要放下自我,消除自我意识,忘记自我判断,平复自我情绪 5、对美…

修仙类(基类,派生类)

include include include "Cultivator.h" include"SpritStone.h" include"Dembeast.h" define CU_SWORD 200 //修仙者战斗力的基数 define SC_TRADE_Demb_SP 2 //以所要…

第二章数字的表示和运算

一多路选择器与三态门 多路选择器:mux。为一个梯形,下端为输入,上端为输出,腰为控制信号。注:若有八个信号输入,则控制信号至少要log2 8=3位。因为要决定编号为几的通过。 三态门:只有一个输入和…

利用XPlaneConnect从X-Plane内读写数据

利用XPlaneConnect从X-Plane内读写数据Posted on 2025-11-02 22:38 九德拉 阅读(0) 评论(0) 收藏 举报利用XPlaneConnect快速从X-Plane内读写数据X-Plane X-Plane面向个人的比较流行的飞行模拟软件之一,用户可以…

fastdbchkrep项目(数据库自动生成巡检报告) open source

fastdbchkrep 起源于我不想整理巡检报告的惰性需求,特意弄的一个工具。 经历了3个多月的功能开发和展示优化,目前已经满足了我的需求。 感兴趣的同学们也来一起尝试下。 github:https://github.com/iop07695432/fas…

cf2000左右dp

CF296B Yaroslav 和两个字符串 / Yaroslav and Two Strings 给定两个由数字和 ? 组成的字符串 \(s,t\),将 ? 替换为数字。若 \(s,t\) 中有 \(s_i>w_i,s_j<w_j(1\leq i,j\leq n)\),则是一种合法的替换。求合法…

nginx入门-server基础

一般情况下下载好nginx后都是修改conf下的nginx.conf文件, 本篇主要写的是nginx.conf中的server_block 基础写法server { listen 80; server_name localhost; location / { root html/s…

Typora使用命令

介绍一些Typora使用命令一、标题 一级标题 # 名称六级标题 ###### 名称---------------------------------------------- 一级标题 ctrl + 1六级标题 ctrl + 6清楚标题 ctrl + 0二、有序列表 1. 名称 ctrl + shift +[降…

免费智普大模型调用

免费智普大模型调用# 添加智普langchain支持: from langchain_community.chat_models import ChatZhipuAImessages = [("system", "你是一名专业的翻译家,可以将用户的中文翻译为英文。"),("…

嵌入式C语言寄存器操作

在嵌入式开发中,寄存器操作是十分重要的,本文讲述嵌入式C语言寄存器操作的常用操作。一、常用寄存器操作 /* 设置位 (置1) */ *pReg |= (1 << bit_position);/* 清除位 (置0) */ *pReg &= ~(1 << bi…