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 相关文章推荐
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
探讨PHP使用eAccelerator的API开发详解
Jun 09 PHP
php操作xml
Oct 27 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
Laravel中使用自己编写类库的3种方法
Feb 10 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
PHP微信模板消息操作示例
Jun 29 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
May 08 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
laravel入门知识点整理
Sep 15 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
Mar 09 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
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
php去掉文件前几行的方法
2015/07/29 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
Python简单计算文件MD5值的方法示例
2018/04/11 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Django models文件模型变更错误解决
2020/05/11 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
什么是servlet链?
2014/07/13 面试题
摄影实习自我鉴定
2013/09/20 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
大跃进口号
2014/06/16 职场文书
校庆标语集锦
2014/06/25 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
高中军训感想
2015/08/07 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
PHP中多字节字符串操作实例详解
2021/08/23 PHP
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏