开源的傻瓜搜索引擎,帮你快速实现搜索功能

傻瓜一词借鉴自傻瓜相机 , 又称轻便相机、全自动相机 , 通常指容易操作针对一般人而设计的小型全自动相机 。
开源的傻瓜搜索引擎,帮你快速实现搜索功能
文章图片

文章图片
在 HelloGitHub 找到有趣、入门级的开源项目 , 大家好我是卤蛋 。说到搜索第一个想到的应该是鼎鼎大名的 Elasticsearch , 但 ES 对于个人项目有些重 。
今天给大家带来一款轻盈、人人都会用的开源傻瓜搜索引擎——MeiliSearch
开源的傻瓜搜索引擎,帮你快速实现搜索功能
文章图片

文章图片
在介绍 MeiliSearch 之前 , 我想先聊下我是怎么找到它并喜欢上它的 。
我的要求并不高
我开发的 HelloGitHub 小程序:支持关键字搜索往期月刊中的开源项目 。
开源的傻瓜搜索引擎,帮你快速实现搜索功能
文章图片

文章图片
小程序的搜索功能是用 Rust 写的开源搜索引擎 Sonic , 它虽然搜索速度快但使用过程中发现:不支持中文分词 , 导致搜索结果较差没有官方的 Python 客户端 , 三方开源客户端问题较多搜索返回的结果仅有 ID , 需要再去数据库关联其他数据
这些问题直接影响了搜索的体验 , 让我十分苦恼一边看搜索相关的知识 , 另外也在寻找新的开源解决方案 。想找一个:
部署+配置简单、支持中文分词、搜索速度快、轻量级开源搜索引擎项目 。
俗称:傻瓜中文搜索引擎 。
它有个美丽的名字
开源的傻瓜搜索引擎,帮你快速实现搜索功能
文章图片

文章图片
它有个“美丽”(meili)的名字「MeiliSearch」 , 同样是用 Rust 写的开源搜索引擎 , 支持:
开源的傻瓜搜索引擎,帮你快速实现搜索功能
文章图片

文章图片
概述功能:搜索速度快、全文搜索、支持汉字、容易安装和维护 , 这不就是我在找的:傻瓜中文搜索引擎吗?
我已经摩拳擦掌的跃跃欲试了 , 话不多说搞起!
简单的开始
纸上得来终觉浅 , 得上手试试效果 。
1、安装和启动
Linux & Mac OS 的一键安装和启动的命令:curl -L https://install.meilisearch.com | sh./meilisearch
这个安装够不够傻瓜 启动成功如下图:
【开源的傻瓜搜索引擎,帮你快速实现搜索功能】
开源的傻瓜搜索引擎,帮你快速实现搜索功能
文章图片

文章图片
用浏览器访问:http://127.0.0.1:7700/ 就可以看到 MeiliSearch 提供的 Web 搜索页面 。我提前写入了一些数据 , 用来演示搜索:
开源的傻瓜搜索引擎,帮你快速实现搜索功能
文章图片

文章图片
2、基本操作
MeiliSearch 就是一个搜索的服务 , 提供 RESTful API 通讯协议更加通用 , 官方提供了多种编程语言的客户端:JavaScriptPythonPHPGo...
后面的演示将采用 Python 代码作为示例 , 安装 Python SDK:# 要求 Python3.6+pip3/pip install meilisearch
用 Python 实现连接、写入、查询、删除等基本操作:import meilisearchclient = meilisearch.Client('http://127.0.0.1:7700', 'masterKey') # masterKey 是密码# index 相当于数据库的表index = client.index('books')# 准备写入搜索的数据documents = [{ 'book_id': 123,'title': 'Pride and Prejudice' },{ 'book_id': 456,'title': 'Le Petit Prince' },{ 'book_id': 1,'title': 'Alice In Wonderland' },{ 'book_id': 1344, 'title': 'The Hobbit' },{ 'book_id': 4,'title': 'Harry Potter and the Half-Blood Prince' },{ 'book_id': 42,'title': 'The Hitchhiker\'s Guide to the Galaxy' }]# 删:清空指定 indexindex.delete_all_documents()# 写:result = index.add_documents(documents) # 该引擎会根据写入数据 ID 做替换或者新增的操作# 写入后并不代表搜索引擎处理完成 , 可以查看返回 updateId 的状态index.get_update_status(result.get('updateId'))# enqueued, processed or failed 三种状态(processed 代表完成)# 查:index.search('harry pottre')# 结果:# 包含丰富的字段"""{// 命中的结果"hits" => [{"book_id" => 4,"title" => "Harry Potter and the Half-Blood Prince"}],// 页"offset" => 0,// 每页条数"limit" => 20,// 处理耗时"processingTimeMs" => 1,// 查询的内容"query" => "harry pottre"}"""