MeiliSearch 从入门到不精通
MeiliSearch 是近两年开源的一个项目,主要目标是在小数据规模下实现比 ES 更加快速和易用的搜索体验。
主页
文档
上周发现 MeiliSearch 已经支持中文分词
(旁白,回头找老外问问,他们咋给项目起了一个中文名叫Meili
?)
https://github.com/meilisearch/MeiliSearch/issues/1182
Meili 是挪威神话中的神,指“可爱的人”,是奥丁神之子,托尔神的兄弟。
MeiliSearch 支持的功能如下
- 开源
- 用户量(开源搜索引擎第二名)
- 中文分词
- 同义词
- 纠错
- 高亮
- 全文返回
- 高级搜索
- 停用词、停用字段
- 加权、降权
- 逻辑搜索
- 唯一字段聚合
- 分页
- 重新索引(覆盖)
我们目前在用 OpenSearch,同时也在尝试跟 kalasearch 进行沟通。卡拉搜索是一个新的搜索服务创业公司,可能是因为公司规模小人手不够,他们目前只对明确付费的客户服务。
对于搜索引擎来讲,以下几个功能尤其重要
- 词库动态索引,卡拉支持新词发现并重新索引,OS 支持自定义词库和内置词库,但需要手工索引,ES 同理
- 中文
- 同义词
- 分页
- 复杂的搜索语法
- 权重管理
- 快速
- 易用
ES 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。
Meili 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。
MeiliSearch is a RESTful search API. It aims to be a ready-to-go solution for everyone who wants a fast and relevant search experience for their end-users
Meili 真的做了一个命令就可以完成安装和使用,安装方便,搜索速度飞快。
详细功能可以参考
Meili 的中文分词功能,刚刚完成开发,并未合并到主分支,所以需要自行编译。
目前支持中文分词的分支是 0.18.0,也许过一段时间 0.18 的预编译包就发布了,各位可以关注一下。
+## v0.18.0
+
+ - Integration with the new tokenizer (#1091)
+ - Fix setting consistency bug (#1128)
+ - Fix attributes to retrieve bug (#1131)
+ - Increase default payload size (#1147)
+ - Improvements to code quality (#1167, #1165, #1126, #1161)
+
编译方法
git clone https://github.com/meilisearch/MeiliSearch.git
cd MeiliSearch
rustup override set stable
如果你还没有安装 Rust,可以自行查找资料,安装 Rust
和包管理器 cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
依赖安装过程比较缓慢,不过好在我有 ClassX Pro
,编译过程感觉比 Golang 要慢,不知道是不是我的错觉。
启动命令非常简单
./meilisearch
Meili 不使用配置文件进行配置,而是使用参数或者环境变量进行控制
https://docs.meilisearch.com/guides/advanced_guides/configuration.html#options
接下来,进行索引和搜索测试
配置索引,索引不需要指定字段和类似,不用担心 ES 的 mapping 冲突问题
curl -d '{
"uid": "movies",
"primaryKey": "id"
}' \
http://127.0.0.1:7700/indexes
添加测试数据
curl -X POST 'http://127.0.0.1:7700/indexes/movies/documents'\
--data @movies.json
做完这一步就可以打开 WebUI http://127.0.0.1:7700
进行搜索测试了
接下来通过接口配置一些同义词
curl -d '{
"扫黑": [
"除黑",
"打黑"
],
"除黑": [
"扫黑",
"打黑"
],
"打黑": [
"除黑",
"扫黑"
],
}' \
http://127.0.0.1:7700/indexes/wechat/settings/synonyms
同义词是单向的,所以这里需要配置多次列表。那么问题来了,如果我有几十万同义词,应该怎么配置呢。
同义词的词林,一般建议使用哈工大的词库,下回我们细讲。
同义词搜索测试
curl -d '{
"q": "扫黄"
}' \
http://127.0.0.1:7700/indexes/movies/search
今天上午摸鱼结束,下回接着讲词库管理。