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 相关文章推荐
dedecms后台验证码总提示错误的解决方法
Mar 21 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
浅析get与post的一些特殊情况
Jul 28 PHP
php制作文本式留言板
Mar 18 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
Jun 12 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
Oct 12 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购物网站支付paypal使用方法
2010/11/28 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
解析PHP的session过期设置
2013/06/29 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP单例模式详细介绍
2015/07/01 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
jQuery Ajax之load()方法
2009/10/12 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
python fabric实现远程部署
2017/01/05 Python
深入理解python对json的操作总结
2017/01/05 Python
名片管理系统python版
2018/01/11 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
python实现单机五子棋
2020/08/28 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
进修护士自我鉴定
2013/10/14 职场文书
车工岗位职责
2013/11/26 职场文书
学习党课思想汇报
2013/12/29 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
高一学生评语大全
2014/04/25 职场文书
村党支部公开承诺书
2014/05/29 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
python 如何做一个识别率百分百的OCR
2021/05/29 Python
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery