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的FTP学习(二)[转自奥索]
Oct 09 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
PHP日期时间函数的高级应用技巧
May 16 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
Mar 13 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
php常量详细解析
Oct 27 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
PHP的全局错误处理详解
Apr 25 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 随机排序广告的实现代码
2011/05/09 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
百度地图API使用方法详解
2015/08/25 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
python实现名片管理系统
2018/11/29 Python
Python 判断奇数偶数的方法
2018/12/20 Python
在Django中实现添加user到group并查看
2019/11/18 Python
python打包多类型文件的操作方法
2020/09/21 Python
10个示例带你掌握python中的元组
2020/11/23 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
教师学习群众路线心得体会
2014/11/04 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL