Meili Search 初体验

Meili Search 初体验

介绍

Meili Search 是近两年开源的一个搜索引擎项目,其出色的上手速度和小规模数据量下的体验比 ElasticSearch 更加出色。

为什么老外会给这个项目起一个中文拼音名字呢?提说是 Meili是在挪威神话中的神,指 “可爱的人”,是托尔的兄弟。

其功能、用法和 ES Search 十分相似,该项目开箱即支持中文分词 ,这点对我们而言,比 ES Search更加友好,更易上手。

安装

$ curl -L https://install.meilisearch.com | sh

完成后,应该会看到

image-20210722151915243

它的数据存储:

Index > Document 

ES Search十分相似,但又简单了许多。

启动:

$ ./meilisearch --master-key=KpxaSzakqwDZzpQ66DLr3VvcNE0E6YDKijyMZLLHTAUuxphwPYt2IXPhz4i4

在启动实例时,可以选择设置主密钥,如果这样做的话,所有路由都会收到保护,需要密钥才能访问。

如:

image-20210722152523831

如上图,如果在启动时设置了 --master-key 参数,那么所有API都需要在header中带上 X-Meili-API-Key参数,对应的值,就是--master-key的值。

填充数据

引入官方SDK

$  composer require meilisearch/meilisearch-php

目标 index 中填充影片数据(document)

  • ID,Mysql ID
  • name,影片名
        $masterKey = "KpxaSzakqwDZzpQ66DLr3VvcNE0E6YDKijyMZLLHTAUuxphwPYt2IXPhz4i4";
        $client    = new Client('http://127.0.0.1:7700', $masterKey);
        $index     = $client->index('mediachain');
        $qb        = Movie::query()->select(['name', 'id']);
        $qb->chunkById(1000, function ($movies) use (&$index) {
            $documents = [];
            foreach ($movies as $movie) {
                $documents[] = [
                    'name' => $movie->name,
                    'id'   => $movie->id,
                ];
            }
            $result   = $index->addDocuments($documents);
            $updateID = $result['updateId'];
            $this->info("update ID: $updateID");
        });
        return 0;

测试搜索:

$client    = new Client('http://127.0.0.1:7700', $masterKey);
$index     = $client->index('mediachain');
json_encode($index->search('顶楼')->getHits());

结果:

[
    {
        "id":51718,
        "name":"顶楼"
    },
    {
        "id":24372,
        "name":"顶楼大象"
    },
    {
        "id":47377,
        "name":"顶楼 第三季"
    },
    {
        "id":49775,
        "name":"顶楼 第二季"
    },
    {
        "id":3030,
        "name":"顶牛"
    },
    {
        "id":4926,
        "name":"钟楼小精灵"
    },
    {
        "id":13431,
        "name":"阁楼房客是总裁"
    },
    {
        "id":16554,
        "name":"顶级阴谋"
    },
    {
        "id":17065,
        "name":"青楼初次的秘密"
    },
    {
        "id":18660,
        "name":"高楼大劫案"
    },
    {
        "id":20181,
        "name":"钟楼怪人"
    },
    {
        "id":20747,
        "name":"黑楼孤魂"
    },
    {
        "id":21236,
        "name":"鬼楼"
    },
    {
        "id":24670,
        "name":"顶香"
    },
    {
        "id":28121,
        "name":"顶层楼房"
    },
    {
        "id":28186,
        "name":"高楼惊魂"
    },
    {
        "id":28714,
        "name":"顶级乐队"
    },
    {
        "id":29845,
        "name":"青楼十二房"
    },
    {
        "id":31310,
        "name":"钟楼怪人2:老实钟的秘密"
    },
    {
        "id":35539,
        "name":"阁楼"
    }
]

结论

确实非常简单易上手,如果业务场景对搜索要求并未十分苛刻,且数据规模处于中、小规模,十分建议使用 Meili Search

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 MArtian 于 3年前 加精
aria
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

这个搜索引擎和 Laravel Scout 配合起来很方便。

3年前 评论

不错,自带中文分词

3年前 评论
游离不2

中小型是多少数据量?

3年前 评论
aria

@游离不2 这个要看自己怎么理解了,我个人理解为数据量再 500G 以下,这是 meili search 官方说明: docs.meilisearch.com/learn/what_is...

3年前 评论
游离不2 3年前
aria (作者) (楼主) 3年前

自带词库吗?

3年前 评论

体验了一把,对中文搜索及其不友好。 有字段值为刘晓康,搜索的时候搜索刘、刘晓、刘晓康可以,搜索晓、康、晓康都搜索不到。

2年前 评论
xuchunyang 2年前

24年了。针对中文还是不行,搜索"啤酒" 能出现青岛啤酒, 搜索“酒" 就没有了,有点离谱!

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
全栈开发者、技术爱好者 @ 哈希表
文章
1
粉丝
1
喜欢
17
收藏
29
排名:1804
访问:1402
私信
所有博文
社区赞助商