
php中文网最新课程
每日17点准时技术干货分享

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

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

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

比如我们要查询‘搜索引擎’这个关键词在哪些文档中出现过。首先我们通过倒排索引可以查询到该关键词出现的文档位置是在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 的查询构造器,支持常用的如 where、whereIn、whereBetween、orderBy、first、get,也支持分页方法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的版本号保持一致。

▼请点击下方:“阅读原文”,在线查看!


文章评论