起因

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

热门文章

  1. 2019-4-30今天给来学习的学员做了几道试题,提前祝大家劳动节愉快
  2. 视频教程-MVC+EF+LayUI框架的应用案例-软件设计
  3. 微信小程序从注册appid到熟悉静态微信特有标签
  4. 「业务架构」波特的五力分析教程介绍
  5. 编辑PDF书签的软件
  6. VUE定时器,用于登陆获取验证码倒计时
  7. 测试用例是什么?怎么写?不会测试用例的看过来,三分钟教会你
  8. 变频器按启动没反应_变频器常见故障处理
  9. 共享单车管理系统_长沙市首个共享单车管理及运维调度系统在天心区上线
  10. 云计算:openstack neutron(tap、qvb、qvo、qbr详解)