傻瓜一詞借鑒自傻瓜相機,又稱輕便相機、全自動相機,通常指容易操作針對一般人而設計的小型全自動相機。

在 HelloGitHub 找到有趣、入門級的開源項目,大家好我是鹵蛋。說到開源搜尋引擎第一個想到的應該是鼎鼎大名的 ElasticSearch,但 ES 對于個人項目有些重。
今天給大家帶來一款輕盈、人人都會用的開源傻瓜搜尋引擎——MeiliSearch
https://github.com/meilisearch/MeiliSearch
在介紹 MeiliSearch 的功能之前,我想先聊下我是怎麼找到它并喜歡上它的。
我開發的 HelloGitHub 小程式:支援關鍵字搜尋往期月刊中的開源項目。
小程式的搜尋功能是用 Rust 寫的開源搜尋引擎 Sonic,它雖然搜尋速度快但使用過程中發現:
不支援中文分詞,導緻搜尋結果較差
沒有官方的 Python 用戶端,三方開源用戶端問題較多
搜尋傳回的結果僅有 ID,需要再去資料庫關聯其他資料
這些問題直接影響了搜尋的體驗,讓我十分苦惱一邊看搜尋相關的知識,另外也在尋找新的開源解決方案。想找一個:
部署+配置簡單、支援中文分詞、搜尋速度快、輕量級開源搜尋引擎項目。
俗稱:傻瓜中文搜尋引擎。
它有個“美麗”(meili)的名字「MeiliSearch」,同樣是用 Rust 寫的開源搜尋引擎,支援:
概述功能:搜尋速度快、全文搜尋、支援漢字、容易安裝和維護,這不就是我在找的:傻瓜中文搜尋引擎嗎?
我已經摩拳擦掌的躍躍欲試了,話不多說搞起!
紙上得來終覺淺,得上手試試效果。
Linux & Mac OS 的一鍵安裝和啟動的指令:
這個安裝夠不夠傻瓜???? 啟動成功如下圖:
用浏覽器通路:<code>http://127.0.0.1:7700/</code> 就可以看到 MeiliSearch 提供的 Web 搜尋頁面。我提前寫入了一些資料,用來示範搜尋:
MeiliSearch 就是一個搜尋的服務,提供 RESTful API 通訊協定更加通用,官方提供了多種程式設計語言的用戶端:
JavaScript
Python
PHP
Go
...
後面的示範将采用 Python 代碼作為示例,安裝 Python SDK:
用 Python 實作連接配接、寫入、查詢、删除等基本操作:
至此已經實作了搜尋的最基本的功能,但探索不止于此。
MeiliSearch 可通過配置規則來提高搜尋結果:
synonyms:同義詞
stopWords:停用詞(為節省存儲空間和提高搜尋效率,自動過濾掉某些字或詞)
rankingRules:排序規則
可以用 Python 用戶端更新 MeiliSearch 配置,示例代碼:
這些設定可以有效的提高搜尋效果,比如使用停用詞之前,搜尋“開源的書籍”命中不了“開源書籍”,加了停用詞即可命中,因為比對時忽略了輸入内容包含的停用詞(無用詞)。
說一個我遇到的坑,我測試搜尋效果時發現:go 搜不到,但是 golang 就可以搜尋到,排查了半天最後發現是因為 go 在上面的停用詞字典中????
另外,功能上對比 sonic 沒有詞聯想(suggest),可以通過建立 index+searchableAttributes 實作。
同義詞集合我沒有找到,如果大家有現成的 中/英文 同義詞詞典,歡迎留言告訴我~感謝
MeiliSearch 部署很簡單,增加到系統的 systemd 服務就行了。
但部署正式環境,需要注意以下幾點:
生産環境必須設定密碼,開發環境無強制
生産環境 Web 頁面會關閉
沒有遠端通路和權限控制,可以通過 Nginx 實作 IP 白名單+ Cerbot 實作 HTTPS,提高安全性
可通過 <code>curl 位址</code> 檢視服務狀态
以上就是我使用 MeiliSearch 的一些心得,總體給我的感覺:
安裝簡單,沒有複雜的配置:省心
資料寫入友善,功能豐富:傻瓜
查詢快
一條指令即可啟動搜尋服務,一行代碼實作搜尋功能,有了它我這個搜尋小白都能分分鐘實作一個搜尋服務,舒服~
我用 MeiliSearch 重寫了 HelloGitHub 小程式的搜尋功能,後端用的 FastAPI 架構。除此之外還增加了一些新功能:
熱門搜尋詞
項目詳情頁
項目鏡像位址提高通路速度
新的界面
HelloGitHub 小程式第二版效果圖如下:
已上線,微信搜:HelloGitHub 小程式,即可使用
後面計劃增加:資訊流、評論、打分、使用者系統、積分系統,因為隻有我一個人開發,是以進度會很慢...但我不會半途而廢哒 ????
如果說 MeiliSearch 缺點的話,我覺得搜尋準确度還有待提高,一方面我需要學習下分詞和 NLP 的一些知識,另一方面需要再熟悉下它的 API 和原理,然後再找一些詞典輔助,應該能提高準确度,但心急吃不了熱豆腐慢慢來吧。
最後,希望本文的分享有幫助到你,今天的文章就到這裡了。如果你也想分享把玩開源項目的心得,歡迎投稿原創文章給我,微信:xueweihan(備注:投稿)
優秀的開源項目像散落在海邊的貝殼,需要發現它的人。 HelloGitHub 就是拾貝者,找開源項目來 HelloGitHub 就對了!
關注 HelloGitHub 公衆号 第一時間收到更新。
還有更多開源項目的介紹和寶藏項目等待你的發現。
作者:削微寒
本作品采用署名-非商業性使用-禁止演繹 4.0 國際 進行許可。