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 相关文章推荐
配置支持SSI
Nov 25 PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
thinkphp5实现无限级分类
Feb 18 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
Apr 03 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封装CURL扩展类实例
2015/07/28 PHP
laravel请求参数校验方法
2019/10/10 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python读取Android permission文件
2013/11/01 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
基于python实现计算两组数据P值
2020/07/10 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
EJB timer的种类
2014/10/28 面试题
金融专业大学生自我评价
2014/01/09 职场文书
24岁生日感言
2014/01/13 职场文书
读群众路线心得体会
2014/03/07 职场文书
党员志愿者活动总结
2014/06/26 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
2015年化验室工作总结
2015/04/23 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python