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,问题就可以解决了。

猜你喜欢

转载自blog.csdn.net/kakaluoteyy/article/details/80199981