广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Elasticsearch在PHP下的使用
  • 545
分享到

Elasticsearch在PHP下的使用

elasticsearchphp搜索引擎 2023-09-01 12:09:46 545人浏览 独家记忆
摘要

PHP操作elasticsearch es-php客户端安装 php环境版本要求: PHP >=7.1.0 ext-curl ext-JSON es-php扩展下载地址: https://www.el

PHP操作elasticsearch

es-php客户端安装
php环境版本要求:
PHP >=7.1.0
ext-curl
ext-JSON

es-php扩展下载地址:

https://www.elastic.co/guide/en/elasticsearch/client/php-api/7.x/installation.html
在这里插入图片描述

引在thinkphp6框架中引入elasticsearch/elasticsearch包

composer  require   elasticsearch/elasticsearch="^7.0"

连接es-php客户端
参考文档:
Https://www.elastic.co/guide/en/elasticsearch/client/php-api/7.x/connceting.html

# 引入开发use Elasticsearch\ClientBuilder;$client = ClientBuilder::create()->setHosts(['192.168.1.128:9200'])->build();

es-php索引创建删除
参考文档:
https://www.elastic.co/guide/en/elasticsearch/client/php-api/7.x/index_management.html

创建索引

$index = [            "index"=>"lampol",            "body"=>[                "mappings"=>[                    "properties"=>[                        "name"=>["type"=>"keyWord"                        ],                        "age"=>["type"=>"byte"                        ],                        "addr"=>["type"=>"text","analyzer"=>"ik_max_word"                        ]                    ]                ]            ]        ];        $response = $client->indices()->create($index);

判断索引是否存在、获取mapping数据结构、删除索引index

# 判断索引是否存在$response = $client->indices()->exists(['index'=>'lampol']);# 获取mapping数据结构$response = $client->indices()->getMapping(['index'=>'lampol']);# 删除索引index$response = $client->indices()->delete(['index'=>'test1']);

es-php文档单个插入以及批量插入
文档单个插入

$doc = [            "index"=>'lampol',            "id"=>1,            "body"=>[                "name"=>"liudehua",                "age"=>33,                "addr"=>"中国广东省深圳市"            ]        ];        $response = $client->index($doc);

批量插入

$docs['body'] = [            ['index'=>['_index'=>'lampol','_id'=>2]],            ['name'=>'liming','age'=>43,'addr'=>'山东省青岛市'],            ['index'=>['_index'=>'lampol','_id'=>3]],            ['name'=>'郭富城','age'=>53,'addr'=>'山东省枣庄市']        ];        $response = $client->bulk($docs);

es-php文档查询修改删除

# 文档查询id=3$id = ['index'=>'lampol','id'=>3,'_source'=>['name','age'=>33]];$response = $client->get($id);# 查询$param = [    'index'=>'lampol',    'body'=>[        'query'=>[            'match'=>[                'addr'=>'深圳'            ]        ]    ]];$response = $client->search($param);# 文档更新id=1$doc = [          'index'=>'lampol',          'id'=>1,          'body'=>[              'doc'=>[                  'age'=>53              ]          ]      ];$response = $client->update($doc);# 文档删除id=3$id = ['index'=>'lampol','id'=>3];$response = $client->delete($id);

ES实战logstash同步Mysql数据到es

logstash安装及同步插件jdbc安装配置
1)安装logstash

下载路径(7.12.0版本)
https://www.elastic.co/cn/downloads/past-releases/logstash-7-12-0
在这里插入图片描述
在这里插入图片描述

# 将logstash解压到指定目录下tar xzf logstash-7.12.0-linux-x86_64.tar.gz   -C  /usr/local/# 进入到cd /usr/local/logstash-7.12.0# 创建java包目录mkdir logstash-input-jdbc# 下载mysql-connector-java连接数据库java包放入到logstash-input-jdbc目录中https://repo1.Maven.org/maven2/mysql/mysql-connector-java/# 移动到指定目录mv mysql-connector-java-8.0.12.jar /usr/local/logstash-7.12.0/logstash-input-jdbc/  

在这里插入图片描述

2)配置数据库连接,同是指定读取的数据库表数据

vi /usr/local/logstash-7.12.0/logstash-input-jdbc/mysql.conf# 写入内容# 数据输入input{    jdbc {        # mysql的配置信息        jdbc_connection_string => "jdbc:mysql://192.168.1.106:3306/shop?characterEncoding=utf8&useSSL=false&serverTimezone=PRC&rewriteBatchedStatements=true"        jdbc_user => "root"        jdbc_password => "root"        # java驱动程序,logstash不自带的,如果我们不指定它,logstash则在其java类路径中查找(logstash/logstash-core/lib/jars)        jdbc_driver_library => "/usr/local/logstash-7.12.0/logstash-input-jdbc/mysql-connector-java-8.0.12.jar"        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"        # 定时调度器        schedule => "* * * * *"        # 指定追踪的递增字段名称        tracking_column => "id"        # 启用追踪,如果为true,则需要指定tracking_column。tracking_column值作为:sql_last_value,当设置为false时:sql_last_value为最后一次执行查询的时间        use_column_value => "true"        # 同步点文件,这个文件记录了上次的同步点,重启时会读取这个文件,这个文件可以手动修改        last_run_metadata_path => "usr/local/logstash-7.12.0/logstash-input-jdbc/tt.txt"        # 执行读取mysql数据库操作的sql语句,将数据查询出来,如果数据比较多加入limit限制        statement => "SELECT id,Goods_title from goods"        # 默认时区        jdbc_default_timezone =>"Asia/Shanghai"        # 是否分页分批次从mysql中读取数据再写入es        # jdbc_paging_enabled => "true"        # jdbc_page_size => "1000"        # 追踪字段的类型。目前只有"numeric"和"timestamp",默认numeric        # tracking_column_type => "timestamp"    }}# 过滤字段,一般不用过滤字段的filter {    mutate {        remove_field => ["@timestamp","@version"]    }}# 数据输出output{    elasticsearch {        hosts => ["http://192.168.1.128:9200"]        index => "goods"        document_id => "%{id}"    }}

3)创建指定索引goods

PUT /goods{  "mappings": {    "properties": {      "id":{        "type":"integer"      },      "goods_type":{        "type":"text",        "analyzer": "ik_max_word",        "search_analyzer": "ik_smart"      }    }  }}

4)运行logstash服务

/usr/local/logstash-7.12.0/bin/logstash -f  /usr/local/logstash-7.12.0/logstash-input-jdbc/mysql.conf

查看数据同步到es下goods情况

# 显示不同索引index下有多少数据GET /_cat/indices?v

在这里插入图片描述

tp6实战ES搜索添加更新删除数据

tp6查询并列表高亮展示

搜索页面
D:\phpstudy_pro\WWW\thinkphp6\view\goods\search.html

DOCTYPE html><html lang="en"><head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta name="description" content="">    <meta name="author" content="">    <title>ElasticSearch PHP 实战搜索title>    <link rel="stylesheet" href="http://cdn.bootCSS.com/twitter-bootstrap/3.0.1/css/bootstrap.min.css">    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap-theme.min.css">head><body class="bs-docs-home"><div class="container theme-showcase">    <h1 style=" line-height:2em;">h1><br/>    <div class="row">        <div class="col-sm-3">div>        <div class="col-sm-12">            <div class="panel panel-primary">                <div class="panel-heading">                    <h3 class="panel-title"><strong>ElasticSearch PHP 实战搜索strong>h3>                div>                <div class="panel-body">                    <div class="alert  alert-dismissable">                        <fORM action="/search" method="post" role="form" name="form1"><div class="form-group">    <div class="input-group">        <input type="text" class="form-control" name="keywords" placeholder="关键词">        <span class="input-group-btn">           <button class="btn btn-default" type="submit">开始搜索button>       span>    div>div>                        form>                        <button class="btn btn-success" onclick="location.href='/goods/create'" type="button">添加商品button>                    div>                div>            div>            <div class="col-sm-3">div>        div>    div>    <script src="https://code.Jquery.com/jquery-1.10.2.min.js">script>    <script src="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/js/bootstrap.min.js">script>body>html>

列表页面:上一页、下一页、高亮展示列表数据
D:\phpstudy_pro\WWW\thinkphp6\view\goods\list.html

DOCTYPE html><html lang="en"><head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta name="description" content="">    <meta name="author" content="">    <title>ElasticSearch PHP 实战搜索title>    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap.min.css">    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap-theme.min.css">head><body class="bs-docs-home"><div class="container theme-showcase">    <h1 style=" line-height:2em;">h1><br/>    <div class="row">        <div class="col-sm-3">div>        <div class="col-sm-12">            <div class="panel panel-primary">                <div class="panel-heading">                    <h3 class="panel-title"><strong>ElasticSearch PHP 实战搜索-商品列表strong>h3>                div>                <div class="panel-body">                    <div class="alert  alert-dismissable">                        <div class="table-responsive"><table border="0" cellspacing="0" cellpadding="0" class="table">    <tr class=" label-primary">        <th scope="col" width="20%"><span style="color:white">idspan>th>        <th scope="col"><span style="color:white">商品标题span>th>        <th scope="col"><span style="color:white">操作span>th>    tr>    {foreach $goods as $v}    <tr class="success">        <td>{$v['_source']['id']}td>        <td>{$v['highlight']['goods_title'][0]|raw}td>        <td>            <button class="btn btn-default" type="button"                    onclick="location.href='/goods/'+{$v['_source']['id']}+'/edit'">编辑            button>            <button class="btn btn-danger" type="button" onclick="del({$v['_source']['id']})">删除button>        td>    tr>    {/foreach}table>                        div>                        <div class="col-sm-12"><div class="col-sm-10">div><nav aria-label="Page navigation">    <ul class="pagination">        <li>            <a href="/search?keywords={$keywords}&page={$pre}" aria-label="Previous">                <span aria-hidden="true">上一页span>            a>        li>        <li>            <a href="/search?keywords={$keywords}&page={$next}" aria-label="Next">                <span aria-hidden="true">下一页span>            a>        li>    ul>nav>                        div>                    div>                div>            div>        div>    div>    <script src="https://code.jquery.com/jquery-1.10.2.min.js">script>    <script src="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/js/bootstrap.min.js">script>body>html><script>    function del(id){        $.ajax({            url:'/goods/'+id,            type:'DELETE',            sueccess:function (res){                console.log(res);                // location.href='/search'            }        });    }script>

控制器
D:\phpstudy_pro\WWW\thinkphp6\app\controller\Goods.php

# 引入use Elasticsearch\ClientBuilder;class Goods{public function index()    {        return view('search');    }    public function search(Request $request)    {        //与es建立连接        $client = ClientBuilder::create()->setHosts(['192.168.1.128:9200'])->build();        $keywords = $request->param('keywords', '', 'trim');        $page = $request->param('page');        $size = 20;        if ($page) {            $from = ($page - 1) * 20;            $pre = $page - 1;            $next = $page + 1;        } else {            $pre = 1;            $next = 2;            $from = ($pre - 1) * 20;        }        $search = [            'index' => 'goods',            'body' => [                'query' => [                    'match' => [                        'goods_title' => $keywords                    ]                ],                'from' => $from,                'size' => $size,                'highlight' => [                    'fields' => [                        'goods_title' => new \stdClass()                    ],                    'pre_tags' => [""],                    'post_tags' => ['']                ]            ]        ];        $res = $client->search($search);        return view('list', ['goods' => $res['hits']['hits'], 'keywords' => $keywords, 'pre' => $pre, 'next' => $next]);    }}

高亮报错处理:
https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/php_json_objects.html

new \stdClass()

在这里插入图片描述

es实战之php添加文档到es
为了保证es和数据库中数据实时同步,在保存数据入mysql同时保存一份在es

添加页面
D:\phpstudy_pro\WWW\thinkphp6\view\goods\add.html

DOCTYPE html><html lang="en"><head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta name="description" content="">    <meta name="author" content="">    <title>ElasticSearch PHP 实战搜索title>    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap.min.css">    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap-theme.min.css">head><body class="bs-docs-home"><div class="container theme-showcase">    <h1 style=" line-height:2em;">h1><br/>    <div class="row">        <div class="col-sm-3">div>        <div class="col-sm-12">            <div class="panel panel-primary">                <div class="panel-heading">                    <h3 class="panel-title"><strong>ElasticSearch PHP 实战搜索-添加商品strong>h3>                div>                <div class="panel-body">                    <div class="alert  alert-dismissable">                        <form action="/goods" method="post" role="form" name="form1"><div class="form-group">    <div class="input-group">        <input type="text" name="goods_title" class="form-control" placeholder="商品标题">        <span class="input-group-btn">           <button class="btn btn-default" type="submit">添加button>       span>    div>div>                        form>                    div>                div>            div>            <div class="col-sm-3">div>        div>    div>    <script src="https://code.jquery.com/jquery-1.10.2.min.js">script>    <script src="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/js/bootstrap.min.js">script>body>html>

控制器

public function create(){    return view('add');}public function save(Request $request){   $client = ClientBuilder::create()->setHosts(['192.168.1.128:9200'])->build();   $goods_title = $request->param('goods_title');   $cat_id = 200;   //插入数据库同时插入es   $id = Db::name('goods')->insertGetId(['cat_id'=>$cat_id,'goods_title'=>$goods_title]);   $doc = [       'index'=>'goods',       'id'=>$id,       'body'=>[           'id'=>$id,           'goods_title'=>$goods_title       ]   ];   $client->index($doc);   return view('search');}

es实战之php更新文档
更新数据库同时更新es

更新页面
D:\phpstudy_pro\WWW\thinkphp6\view\goods\edit.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta name="description" content="">    <meta name="author" content="">    <title>ElasticSearch PHP 实战搜索</title>    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap.min.css">    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap-theme.min.css"></head><body class="bs-docs-home"><div class="container theme-showcase">    <h1 style=" line-height:2em;"></h1><br/>    <div class="row">        <div class="col-sm-3"></div>        <div class="col-sm-12">            <div class="panel panel-primary">                <div class="panel-heading">                    <h3 class="panel-title"><strong>ElasticSearch PHP 实战搜索-编辑商品</strong></h3>                </div>                <div class="panel-body">                    <div class="alert  alert-dismissable">                        <form action="/goods/{$goods['id']}" method="post" role="form" name="form1"><input type="hidden" name="_method" value="PUT"><div class="form-group">    <div class="input-group">        <input type="text" name="goods_title" class="form-control"               value="{$goods['goods_title']}">        <span class="input-group-btn">           <button class="btn btn-default" type="submit">保存</button>       </span>    </div></div>                        </form>                    </div>                </div>            </div>            <div class="col-sm-3"></div>        </div>    </div>    <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>    <script src="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/js/bootstrap.min.js"></script></body></html>

控制器

public function edit($id)    {        $goods = Db::name('goods')->where('id', $id)->find();        return view('edit', ['goods' => $goods]);    }public function update(Request $request, $id){    $goods_title = $request->param('goods_title');    //1、更新数据库    Db::name('goods')->where('id', $id)->update(['goods_title' => $goods_title]);    //2、更新es    $client = ClientBuilder::create()->setHosts(['192.168.1.128:9200'])->build();    $doc = [        'index' => 'goods',        'id' => $id,        'body' => [           'doc'=>[               'goods_title' => $goods_title           ]        ]    ];    $client->update($doc);    return view('search');}

php删除es文档
控制器

public function delete($id)    {        //1、删除数据库id数据        Db::name('goods')->where('id', $id)->delete();        //2、删除es        $client = ClientBuilder::create()->setHosts(['192.168.1.128:9200'])->build();        $client->delete(['index' => 'goods', 'id' => $id]);        return json(['status' => 'success']);    }

来源地址:https://blog.csdn.net/weixin_39218464/article/details/124731324

--结束END--

本文标题: Elasticsearch在PHP下的使用

本文链接: https://www.lsjlt.com/news/388490.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Elasticsearch在PHP下的使用
    php操作ElasticSearch es-php客户端安装 php环境版本要求: PHP >=7.1.0 ext-curl ext-json es-php扩展下载地址: https://www.el...
    99+
    2023-09-01
    elasticsearch php 搜索引擎
  • Elasticsearch 如何在 PHP 中使用
    引言:Elasticsearch是一个开源的分布式搜索引擎,它能够实现快速、准确地搜索和分析大量数据。它提供了简单且强大的API,使得开发者可以轻松地在各种编程语言中使用Elasticsearch。这篇文章将向你介绍如何在PHP中使用Ela...
    99+
    2023-10-21
    使用 PHP elasticsearch
  • 在Django中使用ElasticSearch
    目录什么是Elasticsearch?Elasticsearch的用途是什么?Elasticsearch-一些基本概念在Django中使用Elasticsearchmodels.py...
    99+
    2022-11-12
  • 如何在PHP中使用ElasticSearch实现搜索
    这篇“如何在PHP中使用ElasticSearch实现搜索”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何在PHP中使用E...
    99+
    2023-06-05
  • PHP中如何使用Elasticsearch
    这篇文章将为大家详细讲解有关PHP中如何使用Elasticsearch,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP中使用Elasticsearchcomposer require&nbs...
    99+
    2023-06-06
  • Docker下使用Elasticsearch可视化Kibana的方法
    这篇文章将为大家详细讲解有关Docker下使用Elasticsearch可视化Kibana的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用教程在这里我们使用linux系统作为演示系统:fedora...
    99+
    2023-06-07
  • elasticsearch 简单使用【php版本】
    版本说明 本文是在es8.4.1下进行操作,同时已经安装了ik分词器。php操作es的库为​elasticsearch-php,github地址为: GitHub - elastic/elastics...
    99+
    2023-09-15
    elasticsearch php
  • elasticsearch-php 使用详细教程
    先看官方教程地址如下   快速开始 | Elasticsearch-PHP | Elastic 在 composer.json 文件中引入 elasticsearch-php:官方的"~6.0"会报错,改成7就可以 { "requir...
    99+
    2023-09-07
    elasticsearch 大数据
  • 如何在Django中使用ElasticSearch
    这篇文章主要介绍了如何在Django中使用ElasticSearch的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在Django中使用ElasticSearch文章都会有所收获,下面我们一起来看看吧。什么是...
    99+
    2023-06-26
  • Docker下如何使用Elasticsearch可视化Kibana
    本篇内容介绍了“Docker下如何使用Elasticsearch可视化Kibana”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!系统:fed...
    99+
    2023-06-05
  • 使用PHP操作Elasticsearch数据库
    随着大数据时代的到来,很多企业开始选择使用Elasticsearch数据库来存放和索引海量数据。而PHP是一个广泛使用的Web开发语言,因此,了解如何使用PHP操作Elasticsearch数据库将会大有裨益。安装Elasticsearch...
    99+
    2023-05-17
    PHP elasticsearch 数据库操作
  • elasticsearch Client怎么在golang中使用
    今天就跟大家聊聊有关elasticsearch Client怎么在golang中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是golanggolang 是Google开发的...
    99+
    2023-06-14
  • PHP 如何使用 Elasticsearch 的 索引 API 接口
    目录 一、实战场景 二、知识点 PHP Elasticsearch 索引 index MySQL 三、菜鸟实战 一、实战场景 如何在 PHP 中使用 Elasticsearch 的索引 API 接口 二、知识点 PHP Elas...
    99+
    2023-08-31
    elasticsearch 大数据
  • PHP中使用ElasticSearch最新实例讲解
    网上很多关于ES的例子都过时了,版本很老,这篇文章的测试环境是ES6.5 通过composer安装 composer require 'elasticsearch/elastic...
    99+
    2022-11-11
  • 如何在java项目中使用elasticsearch与logstash
    这篇文章将为大家详细讲解有关如何在java项目中使用elasticsearch与logstash,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java的特点有哪些Java的特点有哪些1.Ja...
    99+
    2023-06-06
  • golang elasticsearch Client的使用详解
    elasticsearch 的client ,通过 NewClient 建立连接,通过 NewClient 中的 Set.URL设置访问的地址,SetSniff设置集群 获得连接 后...
    99+
    2022-11-12
  • PHP 8 在Centos7下的编译安装与使用
    PHP 8 在Centos7下的编译安装与使用 前言 PHP官方已经停止维护php7,更新一下PHP8手动安装的教程 ...
    99+
    2023-09-03
    php 开发语言
  • elasticsearch的match_phrase_prefix查询怎么使用
    本文小编为大家详细介绍“elasticsearch的match_phrase_prefix查询怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“elasticsearch的match_phrase_prefix查询怎么使用”文章能帮助...
    99+
    2023-07-05
  • ElasticSearch使用过程是怎样的
    ElasticSearch使用过程是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。这里介绍ElasticSearch的必备知识:从入门、索引管理到映射详解...
    99+
    2023-06-15
  • Elasticsearch的安装使用是怎样的
    本篇文章给大家分享的是有关Elasticsearch的安装使用是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。导读ElasticSearch是一个基于Lucene的搜索服...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作