头图
当我们需要实现全文搜索功能的时候,往往会使用到搜索引擎,比较常用的是Elasticsearch。但是Elasticsearch的硬件配置要求比较高,不同版本间的API兼容性也比较差。今天给大家分享一款轻量级搜索引擎Meilisearch,搜索速度非常快,能实现即时搜索,希望对大家有所帮助!

简介

Meilisearch是一款轻量级搜索引擎,它支持RESTful风格的搜索API,目前在Github上已有50k+star。其目标是成为适用于所有用户的搜索引擎解决方案,能让用户端的每一位用户获得快速且精准的搜索体验。

Meilisearch主要具有如下特性:

  • 搜索速度快:能在50毫秒内获得搜索结果;
  • 即时搜索:在你输入搜索关键词时能立马输出结果;
  • 智能纠错:即使你输入的关键词有误也能获得精准结果;
  • 全面的语言支持:对中文进行了专门的优化支持;
  • 高度可定制的搜索与索引:自定义搜索行为更加符合你的需求;
  • 支持RESTful API:可以用RESTful风格的搜索API进行调用;
  • 支持多种语言的SDK:涵盖Java、JavaScript、Golang、Python等。

下面是使用Meilisearch实现即时搜索的效果图,搜索速度还是非常快的!

安装

使用Docker来部署Meilisearch是非常方便的,我们将采用此种方式!
  • 首先通过如下命令来下载Meilisearch的Docker镜像;
docker pull getmeili/meilisearch:v1.13
  • 下载完成后使用如下命令来运行Meilisearch容器;
docker run -p 7700:7700 --name meilisearch \
-e MEILI_ENV='development' \
-v /mydata/meiliData:/meili_data \
-d getmeili/meilisearch:v1.13

实战项目

这里给大家分享一个实战项目,mall项目是一套基于 SpringBoot3 + Vue 的电商系统(Github标星60K),后端支持多模块和2024最新微服务架构,采用Docker和K8S部署。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!

项目演示:

使用

接下来我们就来讲解下Meilisearch的使用,将使用RESTful API的形式。

索引操作

在Meilisearch中,索引是一系列文档的组合,相当于MySQL中的表的概念,这里我们先来讲解它的使用。

  • 下载完成后我们上传到服务器的指定位置,然后通过curl工具将数据导入到Meilisearch中;

  • 通过curl往Meilisearch中导入索引的命令如下;
curl \
  -X POST '{{MEILISEARCH_URL}}/indexes/movies/documents?primaryKey=id' \
  -H 'Content-Type: application/json' \
  --data-binary @movies.json
  • 接下来我们在Mini Dashboard页面中就可以看到数据了,比如搜索下Transformers

  • 如果你想查看Meilisearch中的所有索引,可以使用如下CURL命令;
curl \
  -X GET '{{MEILISEARCH_URL}}/indexes'
  • 还可以使用Postman来进行调用;

  • 如果想要删除索引的话可以使用如下命令。
curl \
  -X DELETE '{{MEILISEARCH_URL}}/indexes/movies'

设置操作

索引设置是一个包含很多选项的JSON对象,它可以用于定义Meilisearch的搜索行为,有点类似于MySQL中表结构的概念,这里我们来讲解下它的使用。
  • 我们可以通过如下命令查询索引设置;
curl \
  -X GET '{{MEILISEARCH_URL}}/indexes/movies/settings'
  • 在Postman中使用后返回结果如下;

  • 这里我们想要修改下设置,让titlerelease_date字段变成可以排序的,genresrelease_date变成可以筛选的;
curl \
  -X PATCH '{{MEILISEARCH_URL}}/indexes/movies/settings' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "sortableAttributes": [
      "title",
      "release_date"
    ],
    "filterableAttributes": [
      "genres",
      "release_date"
    ]
  }'
  • 在Postman中使用后返回结果如下。

文档操作

在Meilisearch中,文档是一个包含很多属性的对象,有点类似于MySQL中表记录的概念。
  • 我们可以通过如下命令来添加文档;
curl \
  -X POST '{{MEILISEARCH_URL}}/indexes/movies/documents' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "id": 1,
    "title": "Transformers Test",
    "overview": "Young teenager, Sam Witwicky becomes involved in the ancient struggle between two extraterrestrial factions of transforming robots...",
    "genres": [
        "Adventure",
        "Science Fiction",
        "Action"
    ],
    "poster": "https://image.tmdb.org/t/p/w500/6eehp9I54syN3x753XMqjKz8M3F.jpg",
    "release_date": 1182902400
}'
  • 在Postman中使用后返回结果如下;

  • 使用如下命令就可以查看文档了;
curl \
  -X GET '{{MEILISEARCH_URL}}/indexes/movies/documents/1'
  • 在Postman中使用后返回结果如下;

  • 修改文档可以使用如下命令;
curl \
  -X PUT '{{MEILISEARCH_URL}}/indexes/movies/documents' \
  -H 'Content-Type: application/json' \
  --data-binary '[
    {
      "id": 1,
      "title": "Transformers Update"
    }
  ]'
  • 删除文档可以使用如下命令。
curl \
  -X DELETE '{{MEILISEARCH_URL}}/indexes/movies/documents/1'

数据搜索

接下来我们来讲解下如何使用Meilisearch搜索数据;
  • 先来一个简单的搜索;
curl \
  -X POST '{{MEILISEARCH_URL}}/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{ "q": "Transformers" }'
  • 在Postman中使用后返回结果如下;

  • 再来一个分页搜索;
curl \
  -X POST '{{MEILISEARCH_URL}}/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{ "q": "Transformers","offset": 0,"limit": 5 }'
  • 在Postman中使用后返回结果如下;

  • 再来一个搜索排序;
curl \
  -X POST '{{MEILISEARCH_URL}}/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{ "q": "Transformers","offset": 0,"limit": 5,"sort": ["release_date:desc"]}'
  • 在Postman中使用后返回结果如下;

  • 再来一个条件搜索;
curl \
  -X POST '{{MEILISEARCH_URL}}/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{ "q": "Transformers","offset": 0,"limit": 5,"sort": ["release_date:desc"],"filter":"genres = Action OR genres = Adventure"}'
  • 在Postman中使用后返回结果如下;

总结

今天带大家体验了一把Meilisearch的搜索功能,对比Elasticsearch,它需要的配置非常低,搜索速度也非常快,感兴趣的小伙伴可以尝试下它!

项目地址

https://github.com/meilisearch/meilisearch


macrozheng
1.1k 声望1.3k 粉丝