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


至此已经实现了搜索的最基本的功能 , 但探索不止于此 。
3、优化搜索效果
MeiliSearch 可通过配置规则来提高搜索结果:synonyms:同义词stopWords:停用词(为节省存储空间和提高搜索效率 , 自动过滤掉某些字或词)rankingRules:排序规则...
可以用 Python 客户端更新 MeiliSearch 配置 , 示例代码:# 停用词client.index('movies').update_settings({'stopWords': ['the','a','an'],})# 排序规则client.index('movies').update_ranking_rules(["typo","words","proximity","attribute","wordsPosition","exactness","asc(publish_time)","desc(watch)"])# 查看 stop wordsclient.index('movies').get_stop_words()# 重置设置# index.reset_settings()# 除了搜索其它操作都是异步 , 会直接返回一个 updateId 需要通过 ID 查询处理状态# wait_for_pending_update 可阻塞等待处理结果
这些设置可以有效的提高搜索效果 , 比如使用停用词之前 , 搜索“开源的书籍”命中不了“开源书籍” , 加了停用词即可命中 , 因为匹配时忽略了输入内容包含的停用词(无用词) 。
说一个我遇到的坑 , 我测试搜索效果时发现:go 搜不到 , 但是 golang 就可以搜索到 , 排查了半天最后发现是因为 go 在上面的停用词字典中
另外 , 功能上对比 sonic 没有词联想(suggest) , 可以通过新建 index+searchableAttributes 实现 。
同义词集合我没有找到 , 如果大家有现成的 中/英文 同义词词典 , 欢迎留言告诉我~感谢
4、部署
MeiliSearch 部署很简单 , 增加到系统的 systemd 服务就行了 。cat/etc/systemd/system/meilisearch.service[Unit]Description=MeiliSearchAfter=systemd-user-sessions.service[Service]Type=simpleExecStart=/usr/bin/meilisearch --http-addr 127.0.0.1:7700 --env production --master-key xxxxxx[Install]WantedBy=default.targetEOF# Set the service meilisearchsystemctl enable meilisearch# Start the meilisearch servicesystemctl start meilisearch# Verify that the service is actually runningsystemctl status meilisearch
但部署正式环境 , 需要注意以下几点:生产环境必须设置密码 , 开发环境无强制生产环境 Web 页面会关闭没有远程访问和权限控制 , 可以通过 Nginx 实现 IP 白名单+ Cerbot 实现 HTTPS , 提高安全性可通过 curl 地址 查看服务状态
以上就是我使用 MeiliSearch 的一些心得 , 总体给我的感觉:安装简单 , 没有复杂的配置:省心数据写入方便 , 功能丰富:傻瓜查询快
一条命令即可启动搜索服务 , 一行代码实现搜索功能 , 有了它我这个搜索小白都能分分钟实现一个搜索服务 , 舒服~
爱的结晶(实战)
我用 MeiliSearch 重写了 HelloGitHub 小程序的搜索功能 , 后端用的 FastAPI 框架 。除此之外还增加了一些新功能:热门搜索词项目详情页项目镜像地址提高访问速度新的界面
HelloGitHub 小程序第二版效果图如下:
开源的傻瓜搜索引擎,帮你快速实现搜索功能
文章图片

文章图片
后面计划增加:信息流、评论、打分、用户系统、积分系统 , 因为只有我一个人开发 , 所以进度会很慢...但我不会半途而废哒
最后
如果说 MeiliSearch 缺点的话 , 我觉得搜索准确度还有待提高 , 一方面我需要学习下分词和 NLP 的一些知识 , 另一方面需要再熟悉下它的 API 和原理 , 然后再找一些词典辅助 , 应该能提高准确度 , 但心急吃不了热豆腐慢慢来吧 。
最后 , 希望本文的分享有帮助到你 , 今天的文章就到这里了 。
优秀的开源项目像散落在海边的贝壳 , 需要发现它的人 。
HelloGitHub 就是拾贝者 , 找开源项目来 HelloGitHub 就对了!
来源:HelloGitHub