Loading...
墨滴

tree

2021/07/22  阅读:141  主题:蔷薇紫

Meili Search 初体验

Meili Search 初体验

介绍

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

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

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

安装

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

完成后,应该会看到

image-20210722151915243
image-20210722151915243

它的数据存储:

Index > Document 

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

启动:

$ ./meilisearch --master-key=KpxaSzakqwDZzpQ66DLr3VvcNE0E6YDKijyMZLLHTAUuxphwPYt2IXPhz4i4

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

如:

image-20210722152523831
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(1000function ($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

  • 官网:https://www.meilisearch.com/
  • 文档:https://docs.meilisearch.com/
  • Github:https://github.com/meilisearch/MeiliSearch

tree

2021/07/22  阅读:141  主题:蔷薇紫

作者介绍

tree