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作的文本留言本的例子(六)
Oct 09 PHP
PHP4实际应用经验篇(3)
Oct 09 PHP
PHP控制网页过期时间的代码
Sep 28 PHP
session在PHP大型web应用中的使用
Jun 25 PHP
基于PHP array数组的教程详解
Jun 05 PHP
php define的第二个参数使用方法
Nov 04 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
提高php编程效率技巧
Aug 13 PHP
PHP 实现页面静态化的几种方法
Jul 23 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
php生成动态验证码gif图片
2015/10/19 PHP
PHP attributes()函数讲解
2019/02/03 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
使用Python操作MySQL的一些基本方法
2015/08/16 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
医学生自荐信
2013/12/03 职场文书
司马光教学反思
2014/02/01 职场文书
学雷锋标语
2014/06/25 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
go xorm框架的使用
2021/05/22 Golang
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android