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 相关文章推荐
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
php 无限极分类
Mar 27 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
php支付宝在线支付接口开发教程
Sep 19 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
PHP多进程通信-消息队列使用
Mar 08 PHP
基于php伪静态的实现方法解析
Jul 31 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.MVC的模板标签系统(四)
2006/09/05 PHP
php横向重复区域显示二法
2008/09/25 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
JQuery live函数
2010/12/24 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
jquery添加div实现消息聊天框
2020/02/08 jQuery
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
原生JS实现拖拽功能
2020/12/16 Javascript
python连接池实现示例程序
2013/11/26 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
Python随机数random模块使用指南
2016/09/09 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
python中upper是做什么用的
2020/07/20 Python
Django中template for如何使用方法
2021/01/31 Python
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
驾驶员岗位职责
2014/01/29 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
会计主管竞聘书
2015/09/15 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
Oracle使用别名的好处
2022/04/19 Oracle