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 ...
最新文章
- sklearn数据处理_one_hot
- 模拟 POJ 2632 Crashing Robots
- NEC使用C+L EDFA在超过1.1万公里的海底光缆中首次实现50Tb传输
- java消费者和生产者模型_Java实现简易生产者消费者模型过程解析
- mysql 和 oracle 的一些区别
- python控制鼠标点击标准模块_Python直接控制鼠标键盘模块 pyautogui
- Android View的事件分发机制解析
- 二维矩阵中的最大矩形面积--java实现
- exit() 与_exit的区别
- jquery动画与事件案例
- 统一建模语言UML轻松入门之用例
- 转:MSSQL SERVER行转列 列转行
- UI设计开发工具介绍
- Oracle中的索引类型
- GaussDB系列数据库简介
- 黑客是什么?揭开郭盛华的神秘面纱,讲解他不为人知传奇故事
- 目标检测简介和滑动窗口
- ios开发——图层的新建属性设置和添加
- asp.net打印错误日志
- 清华大学《大数据实践课》总结交流会成功举行