使用elasticsearch-php需要注意的问题
一、前言
最近在把ELK
升级到7.0
之后,发现使用的ES-PHP
并不兼容7.0
的版本,可能作者正在努力开发新版本中吧。不过身为使用者,目前还是尽量少用7.0
的一些新特性吧,兼容旧版本的ES还是可以的。
二、问题
1、使用match_all报错
(1)报错信息:
{"error":{"root_cause":[{"type":"parsing_exception","reason":"[match_all] query malformed, no start_object after query name","line":1,"col":45}],"type":"parsing_exception","reason":"[match_all] query malformed, no start_object after query name","line":1,"col":45},"status":400}
错误原因是: 查询格式错误,查询名称后没有start_object(没错,是有道翻译的),很奇怪,在网络上看到很多直接使用这种方式进行全文搜索的,但是用ES-PHP就不行。
GET /_search
{"query": {"match_all": {}}
}
2、问题改进
突然想起来刚开始看ES-PHP
文档的时候就说过,PHP是采用数组的方式拼接DSL,不能有空数组,因为问题就在于 PHP 会自动把 "content" : {} 转换成 "content" : []
,在 Elasticsearch DSL
中这样的数据格式是非法的。我们需要告诉 PHP 那个空对象就是一个空对象而非空数组。
那么改进为:
"match_all"=> new \stdClass()
官方手册:https://www.elastic.co/guide/cn/elasticsearch/php/current/php_json_objects.html
3、google一下
在网上也发现有人提过这个issues,开发团队给出的建议是:
"match_all"=> (object)[] //也是给出空数组的方式
github讨论:https://github.com/elastic/elasticsearch-php/issues/495
三、更新mapping的时候报错
就像标题一样,当我尝试更新mapping的时候,报错了,错误如下:
Types cannot be provided in put mapping requests, unless the include_type_name parameter is set to true
1、原因
随着 7.0
版本的即将发布,type
的移除也是越来越近了,在 6.0
的时候,已经默认只能支持一个索引一个 type
了,7.0
版本新增了一个参数 include_type_name
,即让所有的 API 是 type
相关的,这个参数在 7.0
默认是 true
,不过在 8.0
的时候,会默认改成 false
,也就是不包含 type
信息了,这个是 type
用于移除的一个开关。
参考:https://elasticsearch.cn/article/601
大概意思就是ES版本更新的问题,现在的type
已经不用那么明显的指定出来了。查看官方的更新mapping
操作,在DSL
里面也没有明确的指出type
。但是对于ES-PHP
,因为不兼容最新的es7.0
,所以更改mapping
要求必须带有type
,源码如下:
//源码在 vendor\elasticsearch\elasticsearch\src\Elasticsearch\Namespaces\IndicesNamespace.php 的第600行public function putMapping($params){$index = $this->extractArgument($params, 'index');$type = $this->extractArgument($params, 'type');$body = $this->extractArgument($params, 'body');/** @var callback $endpointBuilder */$endpointBuilder = $this->endpoints;/** @var \Elasticsearch\Endpoints\Indices\Mapping\Put $endpoint */$endpoint = $endpointBuilder('Indices\Mapping\Put');$endpoint->setIndex($index)->setType($type)->setBody($body);$endpoint->setParams($params);return $this->performRequest($endpoint);}
源码要求必须带有type
,所以就报错了。行叭,按照错误提示,需要加的这个参数,ES-PHP
貌似也识别不了,所以有关mapping
的一些操作就只能等待版本的更新了。
2、解决方案
博主在github上面提交了一条issues
,有大佬指点了一条道路:
$params = ['index' => 'user','custom' => ['include_type_name' => true],'type'=>'_doc','body' => ['properties' => [
]
]
$response = $client->indices()->putMapping();print_r($response);
通过传参解决的,这边的传参要遵循固定的格式,下面为参考链接:
官方文档: https://github.com/elastic/elasticsearch-php/blob/master/docs/per-request-configuration.asciidoc#providing-custom-query-parameters
issues: https://github.com/elastic/elasticsearch-php/issues/883
end
使用elasticsearch-php需要注意的问题相关推荐
- Elasticsearch学习之路(一)
一.前序 1.1正向索引和倒排索引 ** 正向索引通常用于数据库中,在搜索引擎领域使用的最多的就是倒排索引 ** 通过例子表示: 我爱编程, 我爱编程,我是小码农 1.1.1 正向索引 假设我们使用m ...
- 2021年大数据ELK(二十五):添加Elasticsearch数据源
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 添加Elasticsearch数据源 一.Kibana索引模式 添加Elast ...
- 2021年大数据ELK(十九):使用FileBeat采集Kafka日志到Elasticsearch
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 使用FileBeat采集Kafka日志到Elasticsearch 一.需求分 ...
- 2021年大数据ELK(十七):Elasticsearch SQL 订单统计分析案例
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 订单统计分析案例 一.案例介绍 二.创建索引 三.导入测试数据 四.统计不同支 ...
- 2021年大数据ELK(十六):Elasticsearch SQL(职位查询案例)
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 职位查询案例 一.查询职位索引库中的一条数据 二.将SQL转换为DSL 三.职 ...
- 2021年大数据ELK(十五):Elasticsearch SQL简单介绍
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...
- 2021年大数据ELK(十三):Elasticsearch编程(添加职位数据)
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch编程 一.添加职位数据 1.初始化客户端连接 2.实 ...
- 2021年大数据ELK(十二):Elasticsearch编程(环境准备)
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch编程 一.环境准备 1.准备IDEA项目结构 2.准 ...
- 2021年大数据ELK(十一):Elasticsearch架构原理
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch架构原理 一.Elasticsearch的节点类型 ...
- 2021年大数据ELK(八):Elasticsearch安装IK分词器插件
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 安装IK分词器 一.下载Elasticsearch IK分词器 ...
最新文章
- 使用Python和OpenCV实现超快速,简单的伽玛校正功能
- this和that的区别和原理
- 计算机主机的作用和性能指标,Cpu是什么 cpu性能指标主要有哪几个方面【详细介绍】...
- Sublime Text 解决 Unable to download XXX 问题
- Xcode生成的可执行文件在哪里
- centos国内yum源
- VTK:可视化算法之ExponentialCosine
- 定时任务四种实现方式
- Python3实现打家劫舍问题
- linux安装软件时提示找不到镜像的问题:Couldn't resolve host 'mirrorlist.centos.org'
- JBoss-4.2.3.GA下发布EJB3项目遇到的问题之JSF篇
- JAVASCRIPT视频教程推荐==李炎恢JavaScript教程 第一季
- 【C语言】 C语言图形编程 俄罗斯方块 课程设计
- Ubuntu安装google中文输入法
- 云研发 IDE Uncode:演示版发布(欢迎加入开发)
- geomtry string 转换_SQL Server数据转换【包括Geometry类型】的技巧总结
- 泛函分析笔记(十七) 弱偏导数
- 利用LANDesk Management进行软件的打包步骤
- HTTPS证书过期|SSL证书过期 |华硕路由器| NAS|Certtificate is not valid
- 刀客建站系统安装流程
热门文章
- java ecdh算法_椭圆曲线ECC ECDH原理 javacard实现
- python截取逗号_Python基础知识: 元组
- asp.net oracle优化,[转]ASP.NET性能优化
- python numpy指定列最大值,统计次数
- EfficientNetV2震撼发布!87.3%准确率!模型更小,训练更快!谷歌大脑新作
- c++ opencv Rectangle
- tensorflow 查看graph
- python32位安装
- opencv dnn face
- 结构体 CString QString 成员赋值出错