起因

很早之前就知道了这个开源搜索引擎,也一直想用在实际项目中,但是一直没有机会。最近在开发TelSearch这个电报中文搜索引擎的时候,终于有机会可以用上了,这里简单记录一下接入流程。

选型

搜索引擎的选型有很多方案,最常见的就是ES,但是ES确实太重了,对于小项目来说不仅增加的硬件成本,也增加了运维成本,对于个人开发者来说确实不太合适。另外一个就是使用关系型数据库自带的全文检索功能,比如MySQL和PostgreSQL等,都有对应的功能,但是对于性能,中文分词等支持来说确实不太好。所以对于中小型项目来说,MeiliSearch确实是一个不错的选择。

简介

MeiliSearch是一个使用Rust开发的项目,目前github上有27.7KStar了,也是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,一个轻量级搜索引擎相关推荐

  1. [UWP]实现一个轻量级的应用内消息通知控件

    [UWP]实现一个轻量级的应用内消息通知控件 原文:[UWP]实现一个轻量级的应用内消息通知控件 在UWP应用开发中,我们常常有向用户发送一些提示性消息的需求.这种时候我们一般会选择MessageDi ...

  2. **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)

    使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...

  3. 用Python和OpenCV创建一个图片搜索引擎的完整指南

    无论你是将个人照片贴标签并分类,或是在公司的网站上搜索一堆照片,还是在为下一篇博客寻找合适的图片.在用文本和关键字来描述图片是非常痛苦的事. 我就遇到了这样的痛苦的事情,上周二我打开了一个很老的家庭相 ...

  4. 简单分享一个轻量级自动化测试框架目录结构设计

    更多关于python selenium的文章,请关注我的专栏:Python Selenium自动化测试详解 很多人在做自动化测试的过程中会遇到一个瓶颈,就是能够写脚本,但是不知道怎么去组织代码,怎么搭 ...

  5. android最新框架,XUpdate 一个轻量级、高可用性的Android版本更新框架

    XUpdate 一个轻量级.高可用性的Android版本更新框架.赶紧点击使用说明文档,体验一下吧! 特点 支持post和get两种版本检查方式,支持自定义网络请求. 支持设置只在wifi下进行版本更 ...

  6. 如何用Netty实现一个轻量级的HTTP代理服务器

    为什么会想通过Netty构建一个HTTP代理服务器?这也是笔者发表这篇文章的目的所在. 其主要还是源于解决在日常开发测试过程中,一直困扰测试同学很久的一个问题,现在我就来具体阐述一下这个问题. 在日常 ...

  7. php快速开发框架津县,BetePHP:一个轻量级快速开发框架

    BetePHP 关于 BetePHP是一个轻量级快速开发框架.框架提供了一致的API接口,使得使用接口尽可能流畅:由于框架本身不依赖其他库,这使得框架本身运行速度非常快:框架希望使用最简单的方式mak ...

  8. python access 源码_连接的微软Access数据库,这是一个轻量级的Python模块(MDB格式)...

    A lightweight python module to connect Microsoft Access Database. the module is to use ADO engine th ...

  9. 一个轻量级分布式RPC框架--NettyRpc

    1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...

最新文章

  1. DM368学习--捕获视频图像分辨率修改
  2. 浮躁的国内测试界-2006年测试人员招聘感悟
  3. app服务器不运行了,springmvc app URL在本地运行,但不在服务器上运行
  4. Linux的用户和组管理
  5. 相关矩阵可视化 – corrplot() 绘图
  6. 【SNMP】snmp trap 介绍、安装、命令|Trap的发送与接收代码实现
  7. android电视手柄游戏,为游戏而生 Android TV的秘密武器露真容
  8. grafana配置alert
  9. java标签用setbounds_setBounds的用法
  10. 我想用组态王与电能表通讯
  11. win10开启管理员账户
  12. Mongodb高级查询Aggregation聚合组件分页
  13. 【报错】亲测有用,copytranslator只显示部分翻译结果
  14. 【分享】集简云小程序识别名片到CRM流程搭建示例
  15. 可以一键生成crud的php框架,关于Laravel+vue+admin一键生成CRUD代码
  16. 读书是在丰富你,读你自己
  17. android设置系统默认语言
  18. 调教初唐最新章节列表
  19. X-Forwarded-For伪造
  20. SiTime TCXO频率稳定性和频率精度计算

热门文章

  1. Socket 套接字之UDP通信
  2. PHP开发环境搭建工具有哪些?
  3. erlang nif windows x64 Failed to load NIF library : 'Unspecified error'
  4. 统计专业人员职称评价基本标准
  5. 5G对定位技术的影响
  6. 微信公众号web限制用户强制修改字体大小
  7. 自主可控!万应低代码通过华为鲲鹏、麒麟等多项国产化认证及国家信息安全等级保护三级备案证明
  8. 关于戴尔笔记本电脑操作中突然卡死初始化存储,自我检查然后卡兹一声的解决方法
  9. 若批评不自由,则赞美无意义
  10. shell 自定义alias命令