以前有一个叫朱伟大神的人跟我聊过,凡是所谓的坑,都是因为你没看他的源码或者文档导致的。 这话听起来有道理,但问题ElasticSearch的各种文档很是乱,刚接触他的人只看es的dsl语句就会郁闷住的,不用说更深层的文档。  ElasticSearch的更新算是频繁,但我还在使用旧版的1.4,测试环境用2.0.   跟朱伟( 伟哥 )学了不少东西, 今下午跟他把logging过了一遍,收获很大. 

不扯闲话了,正题开始.


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。  http://xiaorui.cc/?p=3151

第一个问题是:


这里用的是python pyes库,当我批量写入elasticsearch的时候 nginx给我返回413的操作。 nginx 413的错误,一般在上传文件的时候出现. 我这边问题肯定是一次request批量过大导致的.

如果不想修改程序,那么可以针对413的问题进行调参.


下面是nginx的错误.

第二个问题, 也跟size大小有点关系。 上面是request body太大,都尼玛200M+了。 ” whose UTF8 encoding is longer than the max length 32766 “, 这个问题是某个字段size过大不能索引引起的。 

下面是python的报错,后面会说明这个原因. 


下面是pyes异常.


下面是ElasticSearch服务端的报错.


在stackoverflow看到解决的方法: 分词要关闭,另外ignore-above 为 256, 这样可以存储超过37266字节的数据。 

index是什么? 他有下面三个选项

ignore_above是啥?

ignore_above是索引的范围,用于not_analyzed字段,默认不会对20字节的数据索引。 

另外他还有一个用处,如果要存储超过32766字节的数据,那么ignore_above = 256就可以了。  

我们在1.7下做过ignore_above参数的测试,当字段是not_analyzed ignore_above 256时,可以存入超过32766字节的数据. 

下面是一个参考的mapping

下面是官方ignore-above:

https://www.elastic.co/guide/en/elasticsearch/reference/current/ignore-above.html

END.



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品