php elasticsearch 获取索引所有文档_Elasticsearch客户端主要方法的使用规则

495a89f5fc39f79e44362ddd6110a36e.png

安装

1.在 composer.json 文件中引入 elasticsearch-php:

{    "require": {        "elasticsearch/elasticsearch": "~6.0"    }}

2.用 composer 安装客户端:

curl -s http://getcomposer.org/installer | phpphp composer.phar install --no-dev

3.在项目中引入自动加载文件(如果还没引入),并且实例化一个客户端:

require 'vendor/autoload.php';use Elasticsearch\ClientBuilder;$client = ClientBuilder::create()->build();

索引一个文档

在 elasticsearch-php 中,几乎一切操作都是用关联数组来配置。REST 路径(endpoint)、文档和可选参数都是用关联数组来配置。

为了索引一个文档,我们要指定4部分信息:index,type,id 和一个 body。构建一个键值对的关联数组就可以完成上面的内容。body 的键值对格式与文档的数据保持一致性。(译者注:如 ["testField" ⇒ "abc"] 在文档中则为 {"testField" : "abc"}):

$params = [    'index' => 'my_index',    'type' => 'my_type',    'id' => 'my_id',    'body' => ['testField' => 'abc']];$response = $client->index($params);print_r($response);

收到的响应数据表明,你指定的索引中已经创建好了文档。响应数据是一个关联数组,里面的内容是 Elasticsearch 返回的decoded JSON 数据:

Array(    [_index] => my_index    [_type] => my_type    [_id] => my_id    [_version] => 1    [result] => created    [_shards] => Array        (            [total] => 2            [successful] => 1            [failed] => 0        )    [_seq_no] => 0    [_primary_term] => 1)

获取一个文档

现在获取刚才索引的文档:

$params = [    'index' => 'my_index',    'type' => 'my_type',    'id' => 'my_id'];$response = $client->get($params);print_r($response);

响应数据包含一些元数据(如 index,type 等)和 _source 属性, 这是你发送给 Elasticsearch 的原始文档数据。

Array(    [_index] => my_index    [_type] => my_type    [_id] => my_id    [_version] => 1    [found] => 1    [_source] => Array        (            [testField] => abc        ))

搜索一个文档

搜索是 elasticsearch 的一大特色,所以我们试一下执行一个搜索。我们准备用 Match 查询来作为示范:

$params = [    'index' => 'my_index',    'type' => 'my_type',    'body' => [        'query' => [            'match' => [                'testField' => 'abc'            ]        ]    ]];$response = $client->search($params);print_r($response);

这个响应数据与前面例子的响应数据有所不同。这里有一些元数据(如 took, timed_out 等)和一个 hits 的数组,这代表了你的搜索结果。而 hits 内部也有一个 hits 数组,内部的 hits 包含特定的搜索结果:

Array(    [took] => 16    [timed_out] =>    [_shards] => Array        (            [total] => 5            [successful] => 5            [skipped] => 0            [failed] => 0        )    [hits] => Array        (            [total] => 1            [max_score] => 0.2876821            [hits] => Array                (                    [0] => Array                        (                            [_index] => my_index                            [_type] => my_type                            [_id] => my_id                            [_score] => 0.2876821                            [_source] => Array                                (                                    [testField] => abc                                )                        )                )        ))

删除一个文档

好了,现在我们看一下如何把之前添加的文档删除掉:

$params = [    'index' => 'my_index',    'type' => 'my_type',    'id' => 'my_id']; $response = $client->delete($params);print_r($response);

你会注意到删除文档的语法与获取文档的语法是一样的。唯一不同的是 delete 方法替代了 get 方法。下面响应数据代表文档已被删除:

Array(    [_index] => my_index    [_type] => my_type    [_id] => my_id    [_version] => 2    [result] => deleted    [_shards] => Array        (            [total] => 2            [successful] => 1            [failed] => 0        )     [_seq_no] => 1    [_primary_term] => 1)

删除一个索引

由于 elasticsearch 的动态特性,我们创建的第一个文档会自动创建一个索引,同时也会把 settings 里面的参数设定为默认参数。由于我们在后面要指定特定的 settings,所以现在要删除掉这个索引:

$deleteParams = [            'index' => 'my_index'        ];$response = $client->indices()->delete($deleteParams);print_r($response);

响应数据是:

Array (   [acknowledged] => 1 )

创建一个索引

由于数据已被清空,我们可以重新开始了,现在要添加一个索引,同时要进行自定义settings:

$params = [    'index' => 'my_index',    'body' => [        'settings' => [            'number_of_shards' => 2,            'number_of_replicas' => 0        ]    ]]; $response = $client->indices()->create($params);print_r($response);

Elasticsearch会创建一个索引,并配置你指定的参数值,然后返回一个消息确认:

Array(    [acknowledged] => 1    [shards_acknowledged] => 1    [index] => my_index)

本节结语

这里只是概述了一下客户端以及它的语法。如果你很熟悉 elasticsearch,你会注意到这些方法的命名跟 REST 路径(endpoint)是一样的。

你也注意到了客户端的参数配置从某种程度上讲也是方便你的IDE易于搜索。$client 对象下的所有核心方法(索引,搜索,获取等)都是可用的。索引管理和集群管理分别在 $client->indices() 和 $client->cluster() 中。

来源:https://www.cnblogs.com/mzhaox/p/11

·END·

PHP开源社区进阶·提升·涨薪5801b70779ee180933430a3ec9233ae8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】如何用好SVN的Branch

转自: http://www.cnblogs.com/lovebanyi/archive/2012/06/13/2547525.html 在SVN里面我们一般会创建出三个文件夹 Trunk(主干) Branch(分支) TAG(标签) 在我们项目一开始的时候我们会将代码…

python数据爬取并可视化_Python爬取数据并实现可视化代码解析

这次主要是爬了京东上一双鞋的相关评论:将数据保存到excel中并可视化展示相应的信息主要的python代码如下:文件1#将excel中的数据进行读取分析import openpyxlimport matplotlib.pyplot as pit #数据统计用的wkopenpyxl.load_workbook(销售数据.xlsx)she…

【转】SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤

转自:https://monday.blog.csdn.net/article/details/51122637 一:使用场景: 假如你的项目(这里指的是手机客户端项目)的某个版本(例如1.0版本)已经完成开发、测试并已经上线了,接…

纠正一个可能的错误翻译—交叉编译

交叉编译,是英文 Cross Compilation 的中文翻译。 下面摘自百度: 交叉编译是在一个平台上生成另一个平台上的可执行代码。 由于嵌入式设备的性能局限,往往不能通过本机编译得到所需软件的可执行程序。因此,以Linux为主机操作系统…

jar 退出run_Java终止线程的三种方式

停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。在 Java 中有以下 3 种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程中止。使用 stop() 方法强…

【转】人工智能教程-前言

前言 大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科幻电影中的场景将成为现实,未来已来! 我很庆幸。十四年前就认定了人工智能专业&…

golang 包含 数组_Golang数组类型

数组数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。1. 声明方法[32]byte //长度为32的数组[2*N] struct {x, y int32} //复杂类型数组[100]*float64 //指针数组[3][5]int //二维数组[2]…

【转】人工智能-1.1.1 什么是神经网络

1.1.1 什么是神经网络 什么是人工智能?通俗来讲,就是让机器能像人一样思考。这个无需解释太多,因为通过各种科幻电影我们已经对人工智能很熟悉了。大家现在感兴趣的应该是——如何实现人工智能? 从1956年夏季首次提出“人工智能…

【V4L2】学习资料

预备知识 V4L2,即Linux视频设备内核驱动。 参考文章 v4l2的学习建议和流程解析Linux V4L2学习高通msm-V4L2-Camera驱动浅析5-buffer00_video_decode (video decode):此内容为英伟达Jetson的Demo文档手册,有条件的可以结合Jetson的代码阅读…

解决margin塌陷的问题_解决margin塌陷与margin合并(margin)清除浮动问题

**1、margin塌陷**问题:垂直方向的父子关系的盒子使用不当会产生margin塌陷。给子级设置margin-top时,他不会相对父级一起动,只有他的margin超过父级的margin时,才会生效,但会带着父级一起动(作者总结,官方…

【转】人工智能-1.2.2 神经网络是如何进行预测的

上一篇文章中我们已经知道了如何将数据输入到神经网络中。那么神经网络是如何根据这些数据进行预测的呢?我们将一张图片输入到神经网络中,神经网络是如何预测这张图中是否有猫的呢?? 这个预测的过程其实只是基于一个简单的公式&a…

js 根据公历日期 算出农历_一招教会你公历换算成农历,要不要试试看

古代的历法是干支纪年,俗称农历或阴历,现在我们都统一采用公历的阿拉伯数字纪年。因此,就存在着一个历法的换算问题。当然,我们可以查历书就直接知道了,但是这个方法并不一定方便。现在告诉大家一个简单的口诀&#xf…

【转】C# HMAC Sha1 生成签字

最近因为工作的需要,开始接触腾讯云,在调用CMQ服务时发现官方提供的SDK只有基于.Net Framework的,而现在做.net项目的谁不是用.net core啊。好吧,既然没有官方的SDK,只能自己写服务来调用Api了。遇到的第一个麻烦点的事…

去哪查阅RFC文档?

什么是RFC文档 RFC。 Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。目前RFC文件是由Internet Society(ISOC)赞助发行。基本的互联…

【转】Power Platform(简介)

Power Platform 系统通过允许用户执行以下三个关键操作来帮助他们推动业务发展:使用 Power BI 从数据中获得见解,通过使用 PowerApps 构建的应用程序来推动智能业务流程,以及使用 Power Automate 自动执行这些流程。 这些解决方案彼此配合协作…

云原生的本质_CloudNative

[TOC]阿里云原生技术公开课第1章:云原生课本节课程要点云原生技术发展历程(为什么要学习这门课)课程简介与预备知识(这门课到底教什么)云原生的定义与技术要点(本节正式内容)一、为什么要开设云原生技术公开课?1. 云原生技术发展简史首先从第一个问题进行…

【Python】打包程序后运行程序出现 ModuleNotFoundError: No module named ‘PySide6‘

问题描述 在python虚拟环境中使用PySide6开发桌面程序,执行打包命令: pyinstaller.exe -F -w .\main.py 打包程序完成后,双击运行,弹出对话框提示: ModuleNotFoundError: No module named ‘PySide6’ 原因 虚拟环境…

【转】人工智能-1.2.1 如何将数据输入到神经网络中

1.2.1 如何将数据输入到神经网络中 通过对前面文章的学习,我们已经知道神经网络可以实现真正的人工智能。本小节我会进行详细地讲解,让大家彻底地弄懂神经网络。在仅仅只学完一篇文章后,你肯定依然感觉朦胧,这是正常的&#xff0…

php对接钉钉_php实现钉钉业务报警机器人

使用场景,服务器报异常错误,想要及时收到报警信息并处理环境介绍,本博使用yaf框架php,仅仅提供思路,参考,具体根据自己实际情况进行编写1,每十分钟执行一次任务脚本# 每10分钟执行一次的任务if …