PHP ElasticSearch做搜索实例讲解


Posted in PHP onFebruary 05, 2020

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

PHP基于ElasticSearch做搜索

在做搜索的时候想到了 ElasticSearch ,而且其也支持 PHP,所以就做了一个简单的例子做测试,感觉还不错,做下记录。

环境

php 7.2

elasticsearch 6.2 下载

elasticsearch-php 6 下载

安装 elasticsearch

下载源文件,解压,重新建一个用户,将目录的所属组修改为此用户,因为 elasticsearch 无法用 root 用户启动。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz

tar zxvf elasticsearch-6.2.3.tar.gz

useradd elasticsearch

password elasticsearch

chown elasticsearch:elasticsearch elasticsearch-6.2.3

cd elasticsearch-6.2.3

./bin/elasticsearch // 启动

安装 PHP 扩展

我这里使用的是 composer 安装 elasticsearch-php。在 composer.json 文件中加入 "elasticsearch/elasticsearch": "~6.0",执行 composer update。

{

 "require": {

  // ...

  "elasticsearch/elasticsearch": "~6.0"

  // ...

 }

}

测试例子

创建表和测试数据

我这里准备了一张文章表来进行测试,首先是建表,其次写入测试数据,准备工作完毕之后,就开始编辑测试用例。

create table articles(

 id int not null primary key auto_increment,

 title varchar(200) not null comment '标题',

 content text comment '内容'

);

insert into articles(title, content) values ('Laravel 测试1', 'Laravel 测试文章内容1'),

('Laravel 测试2', 'Laravel 测试文章内容2'),

('Laravel 测试3', 'Laravel 测试文章内容3');

从 Mysql 读取数据

try {

 $db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');

 $sql = 'select * from articles';

 $query = $db->prepare($sql);

 $query->execute();

 $lists = $query->fetchAll();

 print_r($lists);

} catch (Exception $e) {

 echo $e->getMessage();

}

实例化

require './vendor/autoload.php';

use Elasticsearch\ClientBuilder;

$client = ClientBuilder::create()->build();

名词解释:索引相当于 MySQL 中的表,文档相当于 MySQL 中的行记录

elasticsearch 的动态性质,在添加第一个文档的时候自动创建了索引和一些默认设置。

将文档加入索引

foreach ($lists as $row) {

 $params = [

  'body' => [

   'id' => $row['id'],

   'title' => $row['title'],

   'content' => $row['content']

  ],

  'id' => 'article_' . $row['id'],

  'index' => 'articles_index',

  'type' => 'articles_type'

 ];

 $client->index($params);

}

从索引中获取文档

$params = [

 'index' => 'articles_index',

 'type' => 'articles_type',

 'id' => 'articles_1'

];

$res = $client->get($params);

print_r($res);

从索引中删除文档

$params = [

 'index' => 'articles_index',

 'type' => 'articles_type',

 'id' => 'articles_1'

];

$res = $client->delete($params);

print_r($res);

删除索引

$params = [

  'index' => 'articles_index'

];

$res = $client->indices()->delete($params);

print_r($res);

创建索引

$params['index'] = 'articles_index'; 

$params['body']['settings']['number_of_shards'] = 2; 

$params['body']['settings']['number_of_replicas'] = 0; 

$client->indices()->create($params);

搜索

$params = [ 

 'index' => 'articles_index',

 'type' => 'articles_type',

];   

$params['body']['query']['match']['content'] = 'Laravel';

$res = $client->search($params);

print_r($res);

以上就是PHP基于ElasticSearch做搜索的详细内容,希望三水点靠木整理的内容能够帮助到大家。

PHP 相关文章推荐
Discuz! Passport 通行证整合
Mar 27 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 PHP
PHP实现文件上传功能实例代码
May 18 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 PHP
PHP获取类私有属性的3种方法
Sep 10 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 #PHP
php post换行的方法
Feb 03 #PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 #PHP
php把文件设置为插件的技巧方法
Feb 03 #PHP
PHP如何使用JWT做Api接口身份认证的实现
Feb 03 #PHP
PHP7创建销毁session的实例方法
Feb 03 #PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
Feb 03 #PHP
You might like
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
斜45度寻路实现函数
2009/08/20 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Python实现批量修改文件名实例
2015/07/08 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
python如何将图片转换为字符图片
2020/08/19 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
Python WEB应用部署的实现方法
2019/01/02 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
Python使用re模块验证危险字符
2020/05/21 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
幸福家庭事迹材料
2014/02/03 职场文书
教师对学生的寄语
2014/04/03 职场文书
企业指导教师评语
2014/04/28 职场文书
安全先进班组材料
2014/12/26 职场文书
教师节倡议书2015
2015/04/27 职场文书
黄埔军校观后感
2015/06/10 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
详解MySQL的内连接和外连接
2023/05/08 MySQL