MeiliSearch,一个轻量级搜索引擎
起因
很早之前就知道了这个开源搜索引擎,也一直想用在实际项目中,但是一直没有机会。最近在开发TelSearch这个电报中文搜索引擎的时候,终于有机会可以用上了,这里简单记录一下接入流程。
选型
搜索引擎的选型有很多方案,最常见的就是ES,但是ES确实太重了,对于小项目来说不仅增加的硬件成本,也增加了运维成本,对于个人开发者来说确实不太合适。另外一个就是使用关系型数据库自带的全文检索功能,比如MySQL和PostgreSQL等,都有对应的功能,但是对于性能,中文分词等支持来说确实不太好。所以对于中小型项目来说,MeiliSearch确实是一个不错的选择。
简介
MeiliSearch是一个使用Rust开发的项目,目前github上有27.7K
Star了,也是Rust语言Star最多的几个项目之一了,介于Rust语言最近越来越流行,很多Rust项目都有了越来越多的关注。看官方博客,https://blog.meilisearch.com/meilisearch-raised-5meu-seed-fundraising/,最近还得到了500万美元的融资,不得不感慨开源项目的出来也许就是先慢慢做大,然后寻求融资,好的项目总是会被慧眼识珠。另外,官方好像还在招聘远程开发,不过好像得熟练使用Rust,地址在这里:https://jobs.lever.co/meili。
部署
MeiliSearch
的部署非常简单,也没有什么其他的组件,使用docker可以很容易的部署起来。官方也提供了很多种部署方式:https://docs.meilisearch.com/learn/getting_started/quick_start.html#setup-and-installation,包括部署脚本、docker、homebrew等等。
这里的话就使用docker-compose
来进行部署。
version: "3"
services:meilisearch:image: getmeili/meilisearchnetwork_mode: hostrestart: alwaysvolumes:- ./data:/meili_data
然后直接运行:docker-compose up -d
,然后就成功地运行起来了。
使用
WEB界面
当MeiliSearch
运行起来后,默认会在7700
端口暴露http接口,后续所有的访问,包括新增数据、搜索数据等都是通过这个http接口。另外启动之后,官方还自带了一个web界面,不过这个界面只是用来测试的,在生产环境会被关闭掉。然后你可以在这个界面试用MeiliSearch
强大的搜索功能。
SDK
当然在实际项目中,通常会用SDK来使用对应的一些功能。官方也提供了很多语言的SDK,包括Python、PHP、Java、Go等等流行语言。对应的地址在这里:https://docs.meilisearch.com/learn/getting_started/quick_start.html#add-documents。
增加文档
增加文档可以通过调用对应的接口,这里以Python为例:
先安装对应包:pip3 install meilisearch
,然后直接调用add_documents
方法新增文档。
import meilisearch
import jsonclient = meilisearch.Client('http://127.0.0.1:7700')json_file = open('movies.json')
movies = json.load(json_file)
client.index('movies').add_documents(movies)
搜索文档
搜索文档直接调用search
方法:
client.index('movies').search('botman')
响应数据:
{"hits": [{"id": 29751,"title": "Batman Unmasked: The Psychology of the Dark Knight","poster": "https://image.tmdb.org/t/p/w1280/jjHu128XLARc2k4cJrblAvZe0HE.jpg","overview": "Delve into the world of Batman and the vigilante justice tha","release_date": "2008-07-15"},{"id": 471474,"title": "Batman: Gotham by Gaslight","poster": "https://image.tmdb.org/t/p/w1280/7souLi5zqQCnpZVghaXv0Wowi0y.jpg","overview": "ve Victorian Age Gotham City, Batman begins his war on crime","release_date": "2018-01-12"}],"nbHits": 66,"exhaustiveNbHits": false,"query": "botman","limit": 20,"offset": 0,"processingTimeMs": 12
}
实际项目实践
在实际项目中,通常会将主键ID和想要搜索的内容都导入MeiliSearch
,然后调用搜索的时候返回对应数据的ID,然后通过ID再从数据库中获取原始数据,整个流程下来的话延迟还是比较低的。
资源占用
目前TelSearch
大概十多万条数据,MeiliSearch
占用内存大概1.6G,也还行,在可以接受的范围之内,CPU的使用也不是很高。
原文地址:https://blog.long2ice.io/2022/07/meilisearch%E4%B8%80%E4%B8%AA%E8%BD%BB%E9%87%8F%E7%BA%A7%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/
MeiliSearch,一个轻量级搜索引擎相关推荐
- [UWP]实现一个轻量级的应用内消息通知控件
[UWP]实现一个轻量级的应用内消息通知控件 原文:[UWP]实现一个轻量级的应用内消息通知控件 在UWP应用开发中,我们常常有向用户发送一些提示性消息的需求.这种时候我们一般会选择MessageDi ...
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...
- 用Python和OpenCV创建一个图片搜索引擎的完整指南
无论你是将个人照片贴标签并分类,或是在公司的网站上搜索一堆照片,还是在为下一篇博客寻找合适的图片.在用文本和关键字来描述图片是非常痛苦的事. 我就遇到了这样的痛苦的事情,上周二我打开了一个很老的家庭相 ...
- 简单分享一个轻量级自动化测试框架目录结构设计
更多关于python selenium的文章,请关注我的专栏:Python Selenium自动化测试详解 很多人在做自动化测试的过程中会遇到一个瓶颈,就是能够写脚本,但是不知道怎么去组织代码,怎么搭 ...
- android最新框架,XUpdate 一个轻量级、高可用性的Android版本更新框架
XUpdate 一个轻量级.高可用性的Android版本更新框架.赶紧点击使用说明文档,体验一下吧! 特点 支持post和get两种版本检查方式,支持自定义网络请求. 支持设置只在wifi下进行版本更 ...
- 如何用Netty实现一个轻量级的HTTP代理服务器
为什么会想通过Netty构建一个HTTP代理服务器?这也是笔者发表这篇文章的目的所在. 其主要还是源于解决在日常开发测试过程中,一直困扰测试同学很久的一个问题,现在我就来具体阐述一下这个问题. 在日常 ...
- php快速开发框架津县,BetePHP:一个轻量级快速开发框架
BetePHP 关于 BetePHP是一个轻量级快速开发框架.框架提供了一致的API接口,使得使用接口尽可能流畅:由于框架本身不依赖其他库,这使得框架本身运行速度非常快:框架希望使用最简单的方式mak ...
- python access 源码_连接的微软Access数据库,这是一个轻量级的Python模块(MDB格式)...
A lightweight python module to connect Microsoft Access Database. the module is to use ADO engine th ...
- 一个轻量级分布式RPC框架--NettyRpc
1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...
最新文章
- DM368学习--捕获视频图像分辨率修改
- 浮躁的国内测试界-2006年测试人员招聘感悟
- app服务器不运行了,springmvc app URL在本地运行,但不在服务器上运行
- Linux的用户和组管理
- 相关矩阵可视化 – corrplot() 绘图
- 【SNMP】snmp trap 介绍、安装、命令|Trap的发送与接收代码实现
- android电视手柄游戏,为游戏而生 Android TV的秘密武器露真容
- grafana配置alert
- java标签用setbounds_setBounds的用法
- 我想用组态王与电能表通讯
- win10开启管理员账户
- Mongodb高级查询Aggregation聚合组件分页
- 【报错】亲测有用,copytranslator只显示部分翻译结果
- 【分享】集简云小程序识别名片到CRM流程搭建示例
- 可以一键生成crud的php框架,关于Laravel+vue+admin一键生成CRUD代码
- 读书是在丰富你,读你自己
- android设置系统默认语言
- 调教初唐最新章节列表
- X-Forwarded-For伪造
- SiTime TCXO频率稳定性和频率精度计算