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 反向排序和随机排序代码
Jun 30 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
yii2实现根据时间搜索的方法
May 25 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
php微信公众号开发之秒杀
Oct 20 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
php 正则 过滤html 的超链接
2009/06/02 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
Bootstrap Table使用整理(三)
2017/06/09 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Python单元测试简单示例
2018/07/03 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
python默认参数调用方法解析
2020/02/09 Python
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
中英双版中文教师求职信
2013/10/27 职场文书
20岁生日感言
2014/01/13 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
高中综合实践活动总结
2014/07/07 职场文书
交通安全横幅标语
2014/10/07 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python