開源的傻瓜搜索引擎,幫你快速實(shí)現(xiàn)搜索功能
傻瓜一詞借鑒自傻瓜相機(jī),又稱輕便相機(jī)、全自動(dòng)相機(jī),通常指容易操作針對(duì)一般人而設(shè)計(jì)的小型全自動(dòng)相機(jī)。

在 HelloGitHub 找到有趣、入門級(jí)的開源項(xiàng)目,大家好我是鹵蛋。說(shuō)到搜索第一個(gè)想到的應(yīng)該是鼎鼎大名的 Elasticsearch,但 ES 對(duì)于個(gè)人項(xiàng)目有些重。
今天給大家?guī)?lái)一款輕盈、人人都會(huì)用的開源傻瓜搜索引擎——MeiliSearch

在介紹 MeiliSearch 之前,我想先聊下我是怎么找到它并喜歡上它的。
我的要求并不高
我開發(fā)的 HelloGitHub 小程序:支持關(guān)鍵字搜索往期月刊中的開源項(xiàng)目。

小程序的搜索功能是用 Rust 寫的開源搜索引擎 Sonic,它雖然搜索速度快但使用過(guò)程中發(fā)現(xiàn):
- 不支持中文分詞,導(dǎo)致搜索結(jié)果較差
- 沒有官方的 Python 客戶端,三方開源客戶端問題較多
- 搜索返回的結(jié)果僅有 ID,需要再去數(shù)據(jù)庫(kù)關(guān)聯(lián)其他數(shù)據(jù)
這些問題直接影響了搜索的體驗(yàn),讓我十分苦惱一邊看搜索相關(guān)的知識(shí),另外也在尋找新的開源解決方案。想找一個(gè):
部署+配置簡(jiǎn)單、支持中文分詞、搜索速度快、輕量級(jí)開源搜索引擎項(xiàng)目。
俗稱:傻瓜中文搜索引擎。
它有個(gè)美麗的名字

它有個(gè)“美麗”(meili)的名字「MeiliSearch」,同樣是用 Rust 寫的開源搜索引擎,支持:

概述功能:搜索速度快、全文搜索、支持漢字、容易安裝和維護(hù),這不就是我在找的:傻瓜中文搜索引擎嗎?
我已經(jīng)摩拳擦掌的躍躍欲試了,話不多說(shuō)搞起!
簡(jiǎn)單的開始
紙上得來(lái)終覺淺,得上手試試效果。
1、安裝和啟動(dòng)
Linux & Mac OS 的一鍵安裝和啟動(dòng)的命令:
curl -L https://install.meilisearch.com | sh./meilisearch這個(gè)安裝夠不夠傻瓜 啟動(dòng)成功如下圖:

用瀏覽器訪問:127.0.0.1:7700/ 就可以看到 MeiliSearch 提供的 Web 搜索頁(yè)面。我提前寫入了一些數(shù)據(jù),用來(lái)演示搜索:

2、基本操作
MeiliSearch 就是一個(gè)搜索的服務(wù),提供 RESTful API 通訊協(xié)議更加通用,官方提供了多種編程語(yǔ)言的客戶端:
- JavaScript
- Python
- PHP
- Go
- ...
后面的演示將采用 Python 代碼作為示例,安裝 Python SDK:
# 要求 Python3.6+pip3/pip install meilisearch
用 Python 實(shí)現(xiàn)連接、寫入、查詢、刪除等基本操作:

至此已經(jīng)實(shí)現(xiàn)了搜索的最基本的功能,但探索不止于此。
3、優(yōu)化搜索效果
MeiliSearch 可通過(guò)配置規(guī)則來(lái)提高搜索結(jié)果:
- synonyms:同義詞
- stopWords:停用詞(為節(jié)省存儲(chǔ)空間和提高搜索效率,自動(dòng)過(guò)濾掉某些字或詞)
- rankingRules:排序規(guī)則
- ...
可以用 Python 客戶端更新 MeiliSearch 配置,示例代碼:

這些設(shè)置可以有效的提高搜索效果,比如使用停用詞之前,搜索“開源的書籍”命中不了“開源書籍”,加了停用詞即可命中,因?yàn)槠ヅ鋾r(shí)忽略了輸入內(nèi)容包含的停用詞(無(wú)用詞)。
說(shuō)一個(gè)我遇到的坑,我測(cè)試搜索效果時(shí)發(fā)現(xiàn):go 搜不到,但是 golang 就可以搜索到,排查了半天最后發(fā)現(xiàn)是因?yàn)?go 在上面的停用詞字典中
另外,功能上對(duì)比 sonic 沒有詞聯(lián)想(suggest),可以通過(guò)新建 index+searchableAttributes 實(shí)現(xiàn)。
同義詞集合我沒有找到,如果大家有現(xiàn)成的 中/英文 同義詞詞典,歡迎留言告訴我~感謝
4、部署
MeiliSearch 部署很簡(jiǎn)單,增加到系統(tǒng)的 systemd 服務(wù)就行了。

但部署正式環(huán)境,需要注意以下幾點(diǎn):
- 生產(chǎn)環(huán)境必須設(shè)置密碼,開發(fā)環(huán)境無(wú)強(qiáng)制
- 生產(chǎn)環(huán)境 Web 頁(yè)面會(huì)關(guān)閉
- 沒有遠(yuǎn)程訪問和權(quán)限控制,可以通過(guò) Nginx 實(shí)現(xiàn) IP 白名單+ Cerbot 實(shí)現(xiàn) HTTPS,提高安全性
- 可通過(guò)curl 地址 查看服務(wù)狀態(tài)
以上就是我使用 MeiliSearch 的一些心得,總體給我的感覺:
- 安裝簡(jiǎn)單,沒有復(fù)雜的配置:省心
- 數(shù)據(jù)寫入方便,功能豐富:傻瓜
- 查詢快
一條命令即可啟動(dòng)搜索服務(wù),一行代碼實(shí)現(xiàn)搜索功能,有了它我這個(gè)搜索小白都能分分鐘實(shí)現(xiàn)一個(gè)搜索服務(wù),舒服~
愛的結(jié)晶(實(shí)戰(zhàn))
我用 MeiliSearch 重寫了 HelloGitHub 小程序的搜索功能,后端用的 FastAPI 框架。除此之外還增加了一些新功能:
- 熱門搜索詞
- 項(xiàng)目詳情頁(yè)
- 項(xiàng)目鏡像地址提高訪問速度
- 新的界面
HelloGitHub 小程序第二版效果圖如下:

后面計(jì)劃增加:信息流、評(píng)論、打分、用戶系統(tǒng)、積分系統(tǒng),因?yàn)橹挥形乙粋€(gè)人開發(fā),所以進(jìn)度會(huì)很慢...但我不會(huì)半途而廢噠
最后
如果說(shuō) MeiliSearch 缺點(diǎn)的話,我覺得搜索準(zhǔn)確度還有待提高,一方面我需要學(xué)習(xí)下分詞和 NLP 的一些知識(shí),另一方面需要再熟悉下它的 API 和原理,然后再找一些詞典輔助,應(yīng)該能提高準(zhǔn)確度,但心急吃不了熱豆腐慢慢來(lái)吧。
最后,希望本文的分享有幫助到你,今天的文章就到這里了。
優(yōu)秀的開源項(xiàng)目像散落在海邊的貝殼,需要發(fā)現(xiàn)它的人。
HelloGitHub 就是拾貝者,找開源項(xiàng)目來(lái) HelloGitHub 就對(duì)了!