返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP操作Elasticsearch7.6
  • 428
分享到

PHP操作Elasticsearch7.6

PHP操作Elasticsearch7.6 2020-12-29 06:12:56 428人浏览 猪猪侠
摘要

目录安装操作elasticsearch的PHP库php连接Elasticsearch创建索引和映射添加文档单一文档索引批量(bulk)索引获取文档更新文档部分更新script更新删除文档 首先打开Elasticsearch官网了解

PHP操作Elasticsearch7.6

目录

  • 安装操作elasticsearchPHP
  • php连接Elasticsearch
  • 创建索引和映射
  • 添加文档
    • 单一文档索引
    • 批量(bulk)索引
  • 获取文档
  • 更新文档
    • 部分更新
    • script更新
  • 删除文档

首先打开Elasticsearch官网了解对应编程语言api https://www.elastic.co/guide/en/elasticsearch/client/index.html

点击 PHP API即可查看当前7.X版本的文档内容了

安装操作Elasticsearch的PHP库

我们使用TP5来作为示例

首先需要安装操作Elasticsearch的PHP客户端库,我们打开Https://packaGISt.org/,搜索Elasticsearch。

这里有个Elasticsearch-PHP和Elasticsearch版本的对照表,我们需要根据我们自己使用的Elasticsearch的版本下载对应的Elasticsearch-PHP

由于我的Elasticsearch版本是7.6.2,所以这里我们可以下载最新的Elasticsearch-PHP版本为7.8.0

我们进入到自己的项目目录里安装Elasticsearch-PHP

composer require elasticsearch/elasticsearch=7.8.*

PHP连接Elasticsearch

官方配置文档:https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/configuration.html

$hosts = [
    "127.0.0.1:9200", //IP+端口
];
$client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
var_dump($client);

创建索引和映射

创建一个名为users的索引同时创建映射,并制定映射中各个字段的类型

$hosts = [
    "127.0.0.1:9200", //IP+端口
];
$client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
$params = [
    "index" => "users",
    "body" => [
        "settings" => [
            "number_of_shards" => 3,
            "number_of_replicas" => 2
        ],
        "mappings" => [
            "_source" => [
                "enabled" => true
            ],
            "properties" => [
                "name" => [
                    "type" => "keyword"
                ],
                "age" => [
                    "type" => "integer"
                ],
                "mobile" => [
                    "type" => "text"
                ],
                "email" => [
                    "type" => "text"
                ],
                "birthday" => [
                    "type" => "date"
                ],
                "address" => [
                    "type" => "text"
                ]
            ]
        ]
    ]
];


// Create the index with mappings and settings now
$response = $client->indices()->create($params);
dump($response);

添加文档

当你要在 Elasticsearch 增加文档时,你就需要索引 JSON 文档。jsON 文档会映射 PHP 关联数组,因为 PHP 关联数组可以 encode 为 JSON 数据格式。

因此在 Elasticsearch-PHP 中你可以传递关联数组给客户端来索引文档。我们会概述几种方法来增加文档到 Elasticsearch。

单一文档索引

当索引一个文档时,你可以提供一个 ID 或者让 Elasticsearch 自动生成。

现在有如下数据,我们将其添加到users索引中

$hosts = [
    "127.0.0.1:9200", //IP+端口
];
$client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();

$params = [
    "index" => "users",
    "id"    => 1,
    "body"  => [
        "name"     => "张三",
        "age"      => 10,
        "email"    => "zs@gmail.com",
        "birthday" => "1990-12-12",
        "address"  => "北京"
    ]
];
$client->index($params);

通过Kibana可以查看到已经成功添加到Elasticsearch中

批量(bulk)索引

Elasticsearch 也支持批量(bulk)索引文档。bulk API 要求提供 JSON 格式的 action/元数据 键值对。在 PHP 中构建批量文档数据也是相似的。你首先要创建一个 action 数组对象(如 index 对象),然后你还要创建一个 body 对象。而 PHP 程序则重复上述操作构建文档数据。

$hosts = [
    "127.0.0.1:9200", //IP+端口
];
$client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
$arr = [
    ["name" => "张三", "age" => 10, "email" => "zs@gmail.com", "birthday" => "1990-12-12", "address" => "北京"],
    ["name" => "李四", "age" => 20, "email" => "ls@gmail.com", "birthday" => "1990-10-15", "address" => "河南"],
    ["name" => "白兮", "age" => 15, "email" => "bx@gmail.com", "birthday" => "1970-08-12", "address" => "杭州"],
    ["name" => "王五", "age" => 25, "email" => "ww@gmail.com", "birthday" => "1980-12-01", "address" => "四川"],
];

foreach ($arr as $key => $document) {
    $params["body"][] = [
        "index" => [
            "_index" => "users",
            "_id"    => $key
        ]
    ];

    $params["body"][] = [
        "name"     => $document["name"],
        "age"      => $document["age"],
        "email"    => $document["email"],
        "birthday" => $document["birthday"],
        "address"  => $document["address"]
    ];
}
if (isset($params) && !empty($params)) {
    $client->bulk($params);
}

如果数据量不多可以用上面的方法,如果数据量很多的话,我们就可以考虑分次添加

获取文档

Elasticsearch 提供实时获取文档的方法。这意味着只要文档被索引且客户端收到消息确认后,你就可以立即在任何的分片中检索文档。Get 操作通过 index/type/id 方式请求一个文档信息:

$hosts = [
    "127.0.0.1:9200", //IP+端口
];
$client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
$params = [
    "index" => "users",
    "id"    => 1
];
$response = $client->get($params);
dump($response);

更新文档

部分更新

如果你要部分更新文档(如更改现存字段,或添加新字段),你可以在 body 参数中指定一个 doc 参数。这样 doc 参数内的字段会与现存字段进行合并。

$hosts = [
    "127.0.0.1:9200", //IP+端口
];
$client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
$params = [
    "index" => "users",
    "id"    => 1,
    "body"  => [
        "doc" => [
            "mobile" => "17612345678"
        ]
    ]
];
$response = $client->update($params);
dump($response);

script更新

有时你要执行一个脚本来进行更新操作,如对字段进行自增操作或添加新字段。为了执行一个脚本更新,你要提供脚本命令和一些参数:

例如:将李四的年龄增加5岁

$hosts = [
    "127.0.0.1:9200", //IP+端口
];
$client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
$params = [
    "index" => "users",
    "id"    => "1",
    "body"  => [
        "script" => "ctx._source.age += 5",
    ]
];
$response = $client->update($params);
dump($response);

通过Kibana查看发现年龄已经增加了5岁

删除文档

通过指定文档的 /index/type/id 路径可以删除文档:

$hosts = [
    "127.0.0.1:9200", //IP+端口
];
$client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
$params = [
    "index" => "users",
    "id"    => 2,
];
$response = $client->delete($params);
dump($response);

--结束END--

本文标题: PHP操作Elasticsearch7.6

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

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

猜你喜欢
  • PHP操作Elasticsearch7.6
    目录安装操作Elasticsearch的PHP库PHP连接Elasticsearch创建索引和映射添加文档单一文档索引批量(bulk)索引获取文档更新文档部分更新script更新删除文档 首先打开Elasticsearch官网了解...
    99+
    2020-12-29
    PHP操作Elasticsearch7.6
  • PHP操作Redis
    目录基本指令获取所有的key(keys)判断键对应值的类型(type)删除缓存项(del)设置有效期(expire,expireAt)获取有效期(ttl)检测缓存项是否存在(exists)查看当前数据库key的数量(dbSize)...
    99+
    2017-06-12
    PHP操作Redis
  • PHP操作MySQL
    PHP对数据库进行操作 前言 时间不足,只为二级准备的粗略笔记 很多事情没有答案 一、使用PHP进行MySQL编程         1、php操作MySQL的介绍:                 可以使用拍php内置的mys...
    99+
    2023-10-03
    数据库 服务器 mysql
  • PHP操作solr
    1,php下载solr(索尔)扩展,phpinfo需要支持solr扩展. 2,安装 Solr。Solr 要求您的系统上有 Java。java –version,Java 的版本大于 1.6 3,下载s...
    99+
    2023-09-05
    php solr
  • PHP文件操作
    预计更新 第一章:入门 1.1 环境搭建1.2 变量和数据类型1.3 控制流程 第二章:函数 2.1 函数的定义和调用2.2 函数的参数和返回值2.3 匿名函数和闭包 第三章:数组 3.1 数组的基本...
    99+
    2023-09-05
    php 开发语言
  • php操作mysql(数据库常规操作)
    php操作数据库八步走 ...
    99+
    2016-04-04
    php操作mysql(数据库常规操作)
  • PHP操作mysql(mysqli + PDO)
    【Mysqli面向对象方式操作数据库】 添加、修改、删除数据 $mysqli = new mysqli("localhost","root","123456","test"); $mysqli->query("set names...
    99+
    2016-04-05
    PHP操作mysql(mysqli + PDO)
  • PHP怎样操作Redis
    这篇“PHP怎样操作Redis”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“PHP怎样操作Redis”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这...
    99+
    2024-04-02
  • 使用PHP操作MinIO
    最近实验了下MinIO,发现这个分布式存储还是很好用的,具体不做赘述。此处记录下使用PHP操作存储桶下的文件及文件夹。 我使用了yii2框架(其实并没有使用到yii中从函数),操作minio的前提是要先下载一个模块:aws-sdk-p...
    99+
    2023-08-31
    php 开发语言 MinIO
  • PHP如何操作XML
    本篇内容介绍了“PHP如何操作XML”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php操作XML<xml version=...
    99+
    2023-06-30
  • php操作redis的案例
    这篇文章给大家分享的是有关php操作redis的案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合...
    99+
    2024-04-02
  • PHP中怎么操作Cookie
    PHP中怎么操作Cookie,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。PHP操作Cookie1、设置Cookie PHP用SetCookie函数来设置Cookie。必须注意...
    99+
    2023-06-17
  • PHP有什么操作符
    这篇文章给大家分享的是有关PHP有什么操作符的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先来谈谈PHP,在程序设计的世界里每天都有一场不被承认的战争发生。它是一场在普通人和计算机科学家之间的战争。它是一场发生在...
    99+
    2023-06-17
  • PHP操作MySQL数据库
    PHP操作MySQL数据库的步骤如下:1. 连接数据库:使用`mysqli_connect()`函数或者`PDO`类来建立与MySQ...
    99+
    2023-09-05
    php
  • PHP-FFMpeg 操作音视频
    ✨ 目录 🎈 安装PHP-FFMpeg🎈 视频中提取一张图片🎈 视频中提取多张图片🎈 调整视频大小🎈 ...
    99+
    2023-10-21
    php ffmpeg 音视频 经验分享
  • PHP中怎么实现目录操作和文件操作
    今天就跟大家聊聊有关PHP中怎么实现目录操作和文件操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、目录操作首先介绍的是一个从目录读取的函数,opendir(),readdir(...
    99+
    2023-06-17
  • PHP操作ElasticSearch7.8.1 详细教程
    版本PHP 操作 ElasticSearch 的索引,文档PHP版本: 7.1.9ElasticSearch版本:7.8.1ElasticSearch-PHP根据 PHP 版本选择对应的 ElasticSearch-PHP 版本PHP 安装...
    99+
    2022-06-16
    ElasticSearch php
  • PHP操作Redis详解案例
    $redis = new Redis();connect, open 链接redis服务参数host: string,服务地址port: int,端口号timeout: float,链接时长 (可选, 默认...
    99+
    2024-04-02
  • php操作redis方法示例
    这篇文章给大家分享的是有关php操作redis方法示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并...
    99+
    2024-04-02
  • 使用php操作xml教程
    php操作xml 最近计划写个人的小网站,一系列原因选择了用php来写,最大的问题就是虽然php很流行,但我从来没有接触过php,看了一个多星期的基本语法后做些小练习热热身,但是期间...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作