ES创建索引、投放文档过程

     因为之前对ES并不是太熟悉,实际工作时,在ElasticSearch和Kibanan的使用过程中,出现了好多棘手的状况,修修补补,对于在ES上创建索引到插入文档,搜索、查询文档的整个流程,大概有了规范化的运行模式,以下是在本人总结的大致从创建到插入的流程,以及其中注意的一些细节。
     以ES集成Kibanan为例:
第一步:创建索引
    在Kibanan的Dev Tools网络接口中输入命令创建索引(其他创建索引方式,如Java API、CURL均可)
Kibanan中命令为 :PUT 索引名
第二步:创建mapping映射,设置分词
        这一步还是很关键的,之前使用的时候没有创建映射、设置分词,导致后面使用term精确匹配的时候,“2018-05”这样的字段始终无法命中,因为如果没有任何的相关设置,ES是默认分词的,会把“2018-05”拆分成“2018”和“05”,而无法匹配”2018-05“了。创建各个字段的映射的时候注意类型,否则后面JSON传入文档的时候可能类型不匹配而无法插入文档。
        同样,在Kibanan的Dev Tools中,输入如下格式命令为字段映射type和设置分词
PUT /index_test_name/info/_mapping
{
  "info":{
    "properties":{
		"log_time":{"type":"string","index":"not_analyzed"}, 
		"completion_time":{"type":"string","index":"not_analyzed"}, 
		"city_id":{"type":"string","index":"not_analyzed"},
		"untax_amount":{"type":"double","index":"not_analyzed"}
  }}
}	
        如上,info为该索引的type类型,log_time、completion_time、city_id、untax_amount为该索引包含的字段,上面的映射中,我们为每一个字段设置了数据类型type,"index":"not_analyzed"为设置该字段不分词,导入文档前一定要设置好。
设置成功Kibanan会返回acknowledge:true,提示设置成功。后面,我们就可以添加文档了。


另外,在实际的使用过程中生成报表、可视化或者聚合数据的时候可能会遇到
Fielddata is disabled on text fields by default. Set fielddata=true on [state] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory

这个异常是因为在ES的5以后版本中,对排序、聚合所使用的字段使用单独的数据结构 fielddata, fielddata是缓存到内存中的,为了节省空间,在text类型的字段上是默认禁用 fielddata的,如果需要单独开启,可以命令设置
PUT index_test_name/_mapping/info
{
  "properties":{
    "log_time":{
      "type":"text",
      "fielddata":true
    }
  }
}
这样,就为index_test_name索引的log_time字段开启了fielddata,问题就可以解决了。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值