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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
PHP 防恶意刷新实现代码
May 16 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
php动态生成版权所有信息的方法
Mar 24 PHP
php数组随机排序实现方法
Jun 13 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
Joomla开启SEF的方法
May 04 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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中实现简单的ACL 完结篇
2011/09/07 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
为jQuery增加join方法的实现代码
2010/11/28 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
Javascript缓存API
2016/06/14 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
win7安装python生成随机数代码分享
2013/12/27 Python
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python最长公共子串算法实例
2015/03/07 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
python装饰器常见使用方法分析
2019/06/26 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
英语自我评价范文
2014/01/24 职场文书
技校个人求职信范文
2014/01/25 职场文书
光盘行动倡议书
2014/02/02 职场文书
转预备党员政审材料
2014/02/06 职场文书
小学二年级评语
2014/04/21 职场文书
生产车间标语
2014/06/11 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫