elasticsearch 索引配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch 索引配置相关的知识,希望对你有一定的参考价值。
参考技术A "dynamic": "false",//关闭自动添加字段,关闭后索引数据中如果有多余字段不会修改mapping,默认true
"dynamic": "false",
"_id":
"index": "not_analyzed",
"store": "no"
,
//设置文档标识符可以被索引,默认不能被索引。可以设置为"_id":
"path": "book_id"
,
这样将使用字段book_id作为标识符"_all":
"enabled": "false"
,
//禁用_all字段,_all字段包含了索引中所有其他字段的所有数据,便于搜索。默认启用"_source":
"enabled": "false"
,
//禁用_source字段,_source字段在生成索引过程中存储发送到elasticsearch的原始json文档。elasticsearch部分功能依赖此字段(如局部更新功能),
因此建议开启。默认启用"_index":
"enabled": "true"
,
//启用_index字段,index字段返回文档所在的索引名称。默认关闭。"_timestamp":
"enabled": "true",
"index": "not_analyzed",
"store": "true",
"format": "YYYY-mm-dd"
,
//启用时间戳并设置。时间戳记录文档索引时间,使用局部文档更新功能时,时间戳也会被更新。默认未经分析编入索引但不保存。"_ttl":
"enabled": "true",
"default": "30d"
,
//定义文档的生命周期,
周期结束后文档会自动删除。"_routing":
"required": "true",
"path": "name"
//指定将name字段作为路由,且每个文档必须指定name字段。"properties":
"id":
"type": "long",
//公共属性"store": "yes",
//数值特有属性"precision_step": "0"//指定为该字段生成的词条数,值越低,产生的词条数越多,查询会更快,但索引会更大。默认4
,
"name":
"type": "string",
//公共属性"store": "yes",
"index": "not_analyzed",
//analyzed: 编入索引供搜索、no: 不编入索引、not_analyzed(string专有): 不经分析编入索引"boost": "1",
//文档中该字段的重要性,值越大表示越重要,默认1"null_value": "jim",
//当索引文档的此字段为空时填充的默认值,默认忽略该字段"include_in_all": "xxx"//此属性是否包含在_all字段中,
默认为包含//字符串特有属性"analyzer": "xxx",
//定义用于索引和搜索的分析器名称,默认为全局定义的分析器名称。可以开箱即用的分析器: standard,
simple,
whitespace,
stop,
keyword,
pattern,
language,
snowball"index_analyzer": "xxx",
//定义用于建立索引的分析器名称"search_analyzer": "xxx",
//定义用于搜索时分析该字段的分析器名称"ignore_above": "xxx"//定义字段中字符的最大值,字段的长度高于指定值时,分析器会将其忽略
,
"published":
"type": "date",
//公共属性"store": "yes",
//日期特有属性"precision_step": "0",
//指定为该字段生成的词条数,值越低,产生的词条数越多,查询会更快,但索引会更大。默认4"format": "YYYY-mm-dd"//指定日期格式,默认为dateOptionalTime
'
如何为logstash+elasticsearch配置索引模板?
在使用logstash收集日志的时候,我们一般会使用logstash自带的动态索引模板,虽然无须我们做任何定制操作,就能把我们的日志数据推送到elasticsearch索引集群中,但是在我们查询的时候,就会发现,默认的索引模板常常把我们不需要分词的字段,给分词了,这样以来,我们的比较重要的聚合统计就不准确了:
举个例子,假如有10台需要的监控的机器,他们的机器名如下:
Java代码
search-0-170
search-1-171
search-2-172
search-3-173
search-4-174
search-5-175
search-6-176
search-7-177
search-8-178
search-9-179
如果使用的是logstash的默认模板,它会按-切分机器名,这样以来想统计那台机器上的收集日志最多就有问题了,所以这时候,就需要我们自定义一些索引模板了:
在logstash与elasticsearch集成的时候,总共有如下几种使用模板的方式:
(1)使用默认自带的索引模板 ,大部分的字段都会分词,适合开发和时候快速验证使用
(2)在logstash收集端自定义配置模板,因为分散在收集机器上,维护比较麻烦
(3)在elasticsearc服务端自定义配置模板,由elasticsearch负责加载模板,可动态更改,全局生效,维护比较容易
以上几种方式:
使用第一种,最简单,无须任何配置
使用第二种,适合小规模集群的日志收集,需要在logstash的output插件中使用template指定本机器上的一个模板json路径, 例如 template => "/tmp/logstash.json"
使用第三种,适合大规模集群的日志收集,如何配置,主要配置logstash的output插件中两个参数:
Java代码
manage_template => false//关闭logstash自动管理模板功能
template_name => "crawl"//映射模板的名字
如果使用了,第三种需要在elasticsearch的集群中的config/templates路径下配置模板json,在elasticsearch中索引模板可分为两种:
(一):静态模板
适合索引字段数据固定的场景,一旦配置完成,不能向里面加入多余的字段,否则会报错
优点:scheam已知,业务场景明确,不容易出现因字段随便映射从而造成元数据撑爆es内存,从而导致es集群全部宕机
缺点:字段数多的情况下配置稍繁琐
一个静态索引模板配置例子如下:
Json代码
{
"crawl" : {
"template": "crawl-*",
"settings": {
"index.number_of_shards": 3,
"number_of_replicas": 0
},
"mappings" : {
"logs" : {
"properties" : {
"@timestamp" : {
"type" : "date",
"format" : "dateOptionalTime",
"doc_values" : true
},
"@version" : {
"type" : "string",
"index" : "not_analyzed",
"doc_values" : true
},
"cid" : {
"type" : "string",
"index" : "not_analyzed"
},
"crow" : {
"type" : "string",
"index" : "not_analyzed"
},
"erow" : {
"type" : "string",
"index" : "not_analyzed"
},
"host" : {
"type" : "string",
"index" : "not_analyzed"
},
"httpcode" : {
"type" : "string",
"index" : "not_analyzed"
},
"message" : {
"type" : "string"
},
"path" : {
"type" : "string"
},
"pcode" : {
"type" : "string",
"index" : "not_analyzed"
},
"pro" : {
"type" : "string",
"index" : "not_analyzed"
},
"ptype" : {
"type" : "string",
"index" : "not_analyzed"
},
"save" : {
"type" : "string",
"index" : "not_analyzed"
},
"t1" : {
"type" : "string",
"index" : "not_analyzed"
},
"t2" : {
"type" : "string",
"index" : "not_analyzed"
},
"t3" : {
"type" : "string",
"index" : "not_analyzed"
},
"url" : {
"type" : "string"
}
}
}
}
}
}
(二):动态模板
适合字段数不明确,大量字段的配置类型相同的场景,多加字段不会报错
优点:可动态添加任意字段,无须改动scheaml,
缺点:如果添加的字段非常多,有可能造成es集群宕机
如下的一个logstash的动态索引模板,只设置message字段分词,其他的字段默认都不分词
Json代码
{
"template" : "crawl-*",
"settings" : {
"index.number_of_shards": 5,
"number_of_replicas": 0
},
"mappings" : {
"_default_" : {
"_all" : {"enabled" : true, "omit_norms" : true},
"dynamic_templates" : [ {
"message_field" : {
"match" : "message",
"match_mapping_type" : "string",
"mapping" : {
"type" : "string", "index" : "analyzed", "omit_norms" : true,
"fielddata" : { "format" : "disabled" }
}
}
}, {
"string_fields" : {
"match" : "*",
"match_mapping_type" : "string",
"mapping" : {
"type" : "string", "index" : "not_analyzed", "doc_values" : true
}
}
} ],
"properties" : {
"@timestamp": { "type": "date" },
"@version": { "type": "string", "index": "not_analyzed" },
"geoip" : {
"dynamic": true,
"properties" : {
"ip": { "type": "ip" },
"location" : { "type" : "geo_point" },
"latitude" : { "type" : "float" },
"longitude" : { "type" : "float" }
}
}
}
}
}
}
以上是关于elasticsearch 索引配置的主要内容,如果未能解决你的问题,请参考以下文章