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 Memcache 中实现消息队列
Nov 24 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 PHP
PHP SplObjectStorage使用实例
May 12 PHP
PHPMailer发送邮件
Dec 28 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
tp5.1框架数据库子查询操作实例分析
May 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
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
解决jquery版本冲突的有效方法
2014/09/02 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
JavaScript Split()方法
2015/12/18 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
pyside写ui界面入门示例
2014/01/22 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
Django实现快速分页的方法实例
2017/10/22 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
Python适配器模式代码实现解析
2019/08/02 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
安全技术说明书
2014/05/09 职场文书
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL