1.查询不到导致404报错

  在使用get或者search进行查询获取文档的时候,如果没有结果会抛出404的异常。

  

  我们当然不希望抛出异常,这时候就要使用ignore这个参数来忽略报错,ignore可以忽略异常,其值是需要忽略的异常对应的返回码,常见的有400表示索引已存在,404表示索引没找到。

  $params = [

  'index' = 'test_missing',

  'type' = 'test',

  'id' = 1,

  'client' = [ 'ignore' = 404 ] //忽略404报错,兼容查询不到结果的情况

  ];

  echo $client-get($params);

  //这时候如果没有查询结果,将会返回一个found字段

  [found] = bool(false)

  2.search方法不好使(我使用的是5.0版本)

  不知道为啥,原本提供的search会报411错误(还没有错误信息,跟踪源码也没看出个所以然来),再三确保拼接的参数等都没有问题,查了各种资料都没有解决(据说是body不存在引起的),只能改为curl请求http的模式。

  public function search($params)

  {

  $index = 'your index';

  $type = 'your type';

  $url = sprintf('your es url/%s/%s/_search', $index, $type);

  //封装了curl请求方法

  $data = CurlUtil::post($url, null, json_encode($params['body']));

  $data = json_decode($data, true);

  return $data;

  }

  3.get和delete方法的时候,index不能使用通配符 *

  我想获取(删除)一行id为XXX的数据时,使用了index_*去匹配,发现没有结果返回,要指定到index_1才能有结果返回。

  search方法就可以使用通配符。

  4.假如字段默认设定一种类型,则不能插入另一种类型的数据(好像是废话,但是php中很容易出现,弱类型语言。。)

  我在ES中创建了一些数据作为测试,数据内容如下:

  [

  'age' = '123',

  'name' = '456' //注意,这里应该是string类型才对

  ]

  成功插入一行数据,正当我美滋滋把这个创建函数拿去正常流程跑的时候出现问题了。。

  {error:{root_cause:[{type:mapper_parsing_exception,reason:failed to parse [name]}],type:mapper_parsing_exception,reason:failed to parse [name],caused_by:{type:number_format_exception,reason:For input string: \NateHuang\}},status:400}

  类型错误?不能插入string类型的?啥情况?于是我去ES查了下刚刚插入的数据,发现数据去到ES那边变成这样

  [

  'age' = 123,

  'name' = 456 //这里变成数字类型了

  ]

  age被默认设置成数字类型倒还没什么,name这样搞就玩犊子了。。真的坑啊。。

ES使用中遇到的多种坑,以及解决方案的更多相关文章

  1. 安装CentOS 7.4 可能会出现的坑以及解决方案

    安装CentOS 7.4 可能会出现的坑以及解决方案 (解决方法不唯一,如果行不通的话emmmm~~, 百度会啥你会啥~~) 坑.0X01 解决: 退出虚拟机,以管理员权限运行 坑.0X02 解决: ...

  2. 使用appium过程中常遇到的坑以及解决方案

    立志踩遍所有的坑...以下是学appium遇到的坑以及解决方案,方便自己的同时,也方便他人. 一.cmd输入:aapt dump badging C:\Users\XX\Desktop\xxx.apk ...

  3. MyBatis原生批量插入的坑与解决方案!

    前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入.MyBatis Plus 批量插入.MyBatis 原生批量插入,详情请点击<MyBatis 批量插入数据的 3 种方法 ...

  4. Appium学习实践(五)遇到的坑(记录自己工作中遇到的坑以及解决方案,不定时更新)

    1.错误截图,有时候测试用例执行错误的话,相对于复杂的log,一张错误截图也许能更明确哪里出的问题(当然有时,截图+log还是最好了) 坑:本来是想测试用例fail的时候捕获异常来执行截图操作,但是由 ...

  5. 曾经的pc端项目踩到的一些兼容性的坑及其解决方案

    曾经公司pc端项目一直最低兼容到IE7,要求和chrome下浏览效果一致,真心坑坏了我和另外一个小伙伴(另一个小伙伴以前也没处理过兼容问题).不过还好,在这里真心感谢鑫哥博客的详解,从底层原理讲到了具 ...

  6. Ubuntu16.04安装NVIDIA驱动时的一些坑与解决方案

    这几天在新购置的笔记本上部署工作环境,在安装NVIDIA驱动的时候遇到了不少坑,重装了很多次,在Ubuntu论坛以及其他资料源看了很多大牛的分析,最终终于解决了一个又一个问题,过程比较艰辛,所以决定写 ...

  7. 新建VS工程与填坑:解决方案与项目不在同一目录

    A.新建项目->空工程 B.添加依赖库 1.属性->C/C++->附加包含目录 注:添加头文件目录,必须指向子文件夹 2.属性->链接器->常规->附加库目录 注: ...

  8. webpack1.x环境配置与打包基础【附带各种 "坑" 与解决方案!持续更新中...】

    首先介绍传统模块化开发的主流方案: 1.基与CMD的sea.js,玉伯提出的解决方案,据说原来京东团队在使用.用时才定义,就近加载. 2.基于AMD的require.js,之前在用.提前声明与定义.国 ...

  9. VUE 使用中踩过的坑

    vue如今可谓是一匹黑马,github star数已居第一位!前端开发对于vue的使用已经越来越多,它的优点就不做介绍了,本篇是我对vue使用过程中以及对一些社区朋友提问我的问题中做的一些总结,帮助大 ...

随机推荐

  1. 2.sublime的配置,

    sublime配置完成后,感觉好强大..

  2. mysqld.sock

    sudo  service mysql start https://dev.mysql.com/doc/refman/5.7/en/problems-with-mysql-sock.html B.5. ...

  3. java中byte[] 和16进制字符串互转

    //将byte[]转换为16进制字符串 public static String byte2hex(byte[] b) { StringBuilder hs = new StringBuilder() ...

  4. 【我的Android进阶之旅】Realm数据库学习资料汇总(持续更新)

    介绍 realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android. 2014年7月发布.由YCombinator孵化的创业团队历时几年打造,是第 ...

  5. 怎么找出解析失败的sql

    本文由我和公司同事问心共同测试分析完成. 很多时候我们会有这样一个误区,语法错误或者对象不存在应该在语法语义检查这个步骤就结束了,怎么还会存在共享池里面呢?带着这个几个问题我们做几个简单的测试. 我们 ...

  6. c++中的构造函数初始化列表

    三种情况下,必须在构造函数初始化列表中初始化成员: 1.const成员 2.引用成员 3.没有默认构造函数的成员

  7. go——接口

    Go语言提供了另外一种数据类型,即接口,它把所有具有共性的方法定义在一起,任何其它类型只要实现了这些方法就是实现了这个接口. 接口代表一种调用契约,是多个方法声明的集合.在某些动态语言里,接口(int ...

  8. loc、iloc、ix比较

    使用pandas创建一个对象 In [1]: import pandas as pd In [2]: import numpy as np In [3]: df = pd.DataFrame(np.r ...

  9. 初识JS 基本语法.基本运算符

    JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...

  10. delphi winio 输入

    var key:byte;//ASCII码 btScancode:DWord; //键码begin key:=VkKeyScan('b'); btScancode:= MapVirtualKey(ke ...