es创建索引设置字段不分词_Laravel使用ES的正确姿势

ed19b9a5085b14c7792e987530312e43.png

php中文网最新课程

每日17点准时技术干货分享

f4707505a5726a0d549455f02f9e93c6.png

766e71b0d65290ac306d453fd861fa1d.gif

Elasticsearch 简介

Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

ES 和 Mysql

ES 里的概念类比于 Mysql 如下图所示:

70f01b83ac87ec771f7bc615ce50cf46.png

倒排索引

在说倒排索引之前我们先说说什么是正排索引。正排索引也称为”前向索引”,它是创建倒排索引的基础。

ba896084eb28324876d5a3155d91f831.png

如上在查询一个 keyword 在哪些文档里包含的时候,需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。这个时候我们就用到了倒排索引,首先将文档分词。

a9d26dde0a1482ce91fdfda07f5eab5d.png

比如我们要查询‘搜索引擎’这个关键词在哪些文档中出现过。首先我们通过倒排索引可以查询到该关键词出现的文档位置是在1和3中;然后再通过正排索引查询到文档1和3的内容并返回结果。

Laravel 使用 ES

安装插件

basemkhirat/elasticsearch 是 Laravel 中使用 ES 的一个扩展,使用起来非常方便:
1)安装方法

$ composer require basemkhirat/elasticsearch

2)发布

$ php artisan vendor:publish –provider=”Basemkhirat\Elasticsearch\ElasticsearchServiceProvider”

配置

这样我们就安装好了,如下是我们的连接配置:

'connections' => [    'default' => [        'servers' => [            [                "host" => env("ELASTIC_HOST", "127.0.0.1"),                "port" => env("ELASTIC_PORT", 9200),                'user' => env('ELASTIC_USER', ''),                'pass' => env('ELASTIC_PASS', ''),                'scheme' => env('ELASTIC_SCHEME', 'http'),            ]        ],        'index' => env('ELASTIC_INDEX', 'my_index')    ]],

servers 里可以加入我们的集群配置。

使用方法

该插件的使用方法可借鉴 Laravel 的查询构造器,支持常用的如 wherewhereInwhereBetweenorderByfirstget,也支持分页方法paginate

$documents = ES::connection(“default”)             ->index(“my_index”)              ->type(“my_type”)              ->get();    # return a collection of results

设置字段权重:

ES::type(“my_type”)->search(“hello”, function($search){   $search->boost(2)->fields([“title” => 2, “content” => 1])})->get();

我们也可以通过修改源码扩充自己需要用到的方法,也可以构造原生的查询语句:

$params['body'] = [            'aggs' => [                'all_created' => [                    'terms' => [                        'field' => 'element.raw',                        'size'  => $this->_mAggsPageSize                    ],                    'aggs' => [                        'sum_pv' => [                            'sum' => ['field' => 'pv'],                        ],                    ],                ],            ],        ];

结语

ES 内置分词器对中分支持并不友好,比较推荐的是 IK分词器,需要注意的是ik版本需要与ES的版本号保持一致。                                                

d9ead6e95214b706bc132a9f34be1234.png

0e35ae0c5a2ae8c4a0f71e29786e4232.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值