一、前言

最近在把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需要注意的问题相关推荐

  1. Elasticsearch学习之路(一)

    一.前序 1.1正向索引和倒排索引 ** 正向索引通常用于数据库中,在搜索引擎领域使用的最多的就是倒排索引 ** 通过例子表示: 我爱编程, 我爱编程,我是小码农 1.1.1 正向索引 假设我们使用m ...

  2. 2021年大数据ELK(二十五):添加Elasticsearch数据源

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 添加Elasticsearch数据源 一.Kibana索引模式 添加Elast ...

  3. 2021年大数据ELK(十九):使用FileBeat采集Kafka日志到Elasticsearch

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 使用FileBeat采集Kafka日志到Elasticsearch 一.需求分 ...

  4. 2021年大数据ELK(十七):Elasticsearch SQL 订单统计分析案例

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 订单统计分析案例 一.案例介绍 二.创建索引 三.导入测试数据 四.统计不同支 ...

  5. 2021年大数据ELK(十六):Elasticsearch SQL(职位查询案例)

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 职位查询案例 一.查询职位索引库中的一条数据 二.将SQL转换为DSL 三.职 ...

  6. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...

  7. 2021年大数据ELK(十三):Elasticsearch编程(添加职位数据)

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch编程 一.添加职位数据 1.初始化客户端连接 2.实 ...

  8. 2021年大数据ELK(十二):Elasticsearch编程(环境准备)

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch编程 一.环境准备 1.准备IDEA项目结构 2.准 ...

  9. 2021年大数据ELK(十一):Elasticsearch架构原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch架构原理 一.Elasticsearch的节点类型 ...

  10. 2021年大数据ELK(八):Elasticsearch安装IK分词器插件

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 安装IK分词器 一.下载Elasticsearch IK分词器 ...

最新文章

  1. 使用Python和OpenCV实现超快速,简单的伽玛校正功能
  2. this和that的区别和原理
  3. 计算机主机的作用和性能指标,Cpu是什么 cpu性能指标主要有哪几个方面【详细介绍】...
  4. Sublime Text 解决 Unable to download XXX 问题
  5. Xcode生成的可执行文件在哪里
  6. centos国内yum源
  7. VTK:可视化算法之ExponentialCosine
  8. 定时任务四种实现方式
  9. Python3实现打家劫舍问题
  10. linux安装软件时提示找不到镜像的问题:Couldn't resolve host 'mirrorlist.centos.org'
  11. JBoss-4.2.3.GA下发布EJB3项目遇到的问题之JSF篇
  12. JAVASCRIPT视频教程推荐==李炎恢JavaScript教程 第一季
  13. 【C语言】 C语言图形编程 俄罗斯方块 课程设计
  14. Ubuntu安装google中文输入法
  15. 云研发 IDE Uncode:演示版发布(欢迎加入开发)
  16. geomtry string 转换_SQL Server数据转换【包括Geometry类型】的技巧总结
  17. 泛函分析笔记(十七) 弱偏导数
  18. 利用LANDesk Management进行软件的打包步骤
  19. HTTPS证书过期|SSL证书过期 |华硕路由器| NAS|Certtificate is not valid
  20. 刀客建站系统安装流程

热门文章

  1. java ecdh算法_椭圆曲线ECC ECDH原理 javacard实现
  2. python截取逗号_Python基础知识: 元组
  3. asp.net oracle优化,[转]ASP.NET性能优化
  4. python numpy指定列最大值,统计次数
  5. EfficientNetV2震撼发布!87.3%准确率!模型更小,训练更快!谷歌大脑新作
  6. c++ opencv Rectangle
  7. tensorflow 查看graph
  8. python32位安装
  9. opencv dnn face
  10. 结构体 CString QString 成员赋值出错