ES使用中遇到的多种坑,以及解决方案
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使用中遇到的多种坑,以及解决方案的更多相关文章
- 安装CentOS 7.4 可能会出现的坑以及解决方案
安装CentOS 7.4 可能会出现的坑以及解决方案 (解决方法不唯一,如果行不通的话emmmm~~, 百度会啥你会啥~~) 坑.0X01 解决: 退出虚拟机,以管理员权限运行 坑.0X02 解决: ...
- 使用appium过程中常遇到的坑以及解决方案
立志踩遍所有的坑...以下是学appium遇到的坑以及解决方案,方便自己的同时,也方便他人. 一.cmd输入:aapt dump badging C:\Users\XX\Desktop\xxx.apk ...
- MyBatis原生批量插入的坑与解决方案!
前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入.MyBatis Plus 批量插入.MyBatis 原生批量插入,详情请点击<MyBatis 批量插入数据的 3 种方法 ...
- Appium学习实践(五)遇到的坑(记录自己工作中遇到的坑以及解决方案,不定时更新)
1.错误截图,有时候测试用例执行错误的话,相对于复杂的log,一张错误截图也许能更明确哪里出的问题(当然有时,截图+log还是最好了) 坑:本来是想测试用例fail的时候捕获异常来执行截图操作,但是由 ...
- 曾经的pc端项目踩到的一些兼容性的坑及其解决方案
曾经公司pc端项目一直最低兼容到IE7,要求和chrome下浏览效果一致,真心坑坏了我和另外一个小伙伴(另一个小伙伴以前也没处理过兼容问题).不过还好,在这里真心感谢鑫哥博客的详解,从底层原理讲到了具 ...
- Ubuntu16.04安装NVIDIA驱动时的一些坑与解决方案
这几天在新购置的笔记本上部署工作环境,在安装NVIDIA驱动的时候遇到了不少坑,重装了很多次,在Ubuntu论坛以及其他资料源看了很多大牛的分析,最终终于解决了一个又一个问题,过程比较艰辛,所以决定写 ...
- 新建VS工程与填坑:解决方案与项目不在同一目录
A.新建项目->空工程 B.添加依赖库 1.属性->C/C++->附加包含目录 注:添加头文件目录,必须指向子文件夹 2.属性->链接器->常规->附加库目录 注: ...
- webpack1.x环境配置与打包基础【附带各种 "坑" 与解决方案!持续更新中...】
首先介绍传统模块化开发的主流方案: 1.基与CMD的sea.js,玉伯提出的解决方案,据说原来京东团队在使用.用时才定义,就近加载. 2.基于AMD的require.js,之前在用.提前声明与定义.国 ...
- VUE 使用中踩过的坑
vue如今可谓是一匹黑马,github star数已居第一位!前端开发对于vue的使用已经越来越多,它的优点就不做介绍了,本篇是我对vue使用过程中以及对一些社区朋友提问我的问题中做的一些总结,帮助大 ...
随机推荐
- OracleUNDO
UNDO作用 数据的回滚 一致性读 表的闪回(事务,查询的闪回....) 失败会话的恢复 数据的回滚 SQL> rollback; 回滚的过程就是从回滚段里拿到刚刚执行的这条语句产生的回滚,然后 ...
- mysql 中调用存储过程之后,连接断开不可用
解决方法: 由 mysql_real_connect(&m_mysql,host,user,passwd,Db,0,NULL,0) == NULL 改为 mysql_real_connect( ...
- (转) RabbitMQ学习之延时队列
http://blog.csdn.net/zhu_tianwei/article/details/53563311 在实际的业务中我们会遇见生产者产生的消息,不立即消费,而是延时一段时间在消费.Rab ...
- mybatis12一级缓存
验证一级缓存的存在 对应的实体类 /** *学生对应的实体类 */ public class Student { private Integer sId; private String sName; ...
- 4.Data Types in the mongo Shell-官方文档摘录
总结: 1.MongoDB 的BSON格式支持额外的数据类型 2 Date 对象内部存储64位字节存整数,存储使用NumberLong()这个类来存,使用NumberInt()存32位整数,128位十 ...
- pandas 如何判断指定列是否(全部)为NaN(空值)
判断某列是否有NaN df['$open'].isnull().any() # 判断open这一列列是否有 NaN 判断某列是否全部为NaN df['$open'].isnull().all() # ...
- 初级学IP地址
IP地址是我们上网的凭证!通过IP地址的学习.能够对网络拓扑结构有一个简单的认识,以及对网络的传递过程进行初步了解. 传输数据简单认识 网络中传播的数据是以数据包的形式存在的! 当中包括着目的IP地址 ...
- bootstrap基本使用
bootstrap是封装了css和js代码实现酷炫的效果,所以使用的时候,比如说是列表效果,直接调用它本身定义的函数就ok了 静态文件 把href='..static/..'里面改为url_for静态 ...
- 用cmd运行php代码、socket
一.用cmd运行php代码,首先要对电脑进行配置: 1.右击计算机-属性-高级系统设置-环境变量,我们需要添加环境变量. 2.在Administrator的用户变量(U)下点击新建,弹出对话框,变量名 ...
- 自动化测试调查问卷送《QTP自动化测试最佳实践》
自动化测试调查问卷送<QTP自动化测试最佳实践> http://automationqa.com/forum.php?mod=viewthread&tid=2308&fro ...