#关闭你不需要使用的特性
默认情况下ES会为大多数字段进行索引并且添加doc,这样能够在查询和聚合的时候更快,例如你有一个数值型的字段叫做foo,你需要用这个字段来做柱状图,但是你不会使用它进行过滤,你可以关闭掉这个字段的索引
PUT index
{
"mappings": {
"type": {
"properties": {
"foo": {
"type": "integer",
"index": false
}
}
}
}
}
文本字段存储了一些辅助信息来让文档能够被评分,假如你不需要评分的功能,可以关掉它
PUT index
{
"mappings": {
"type": {
"properties": {
"foo": {
"type": "text",
"norms": false
}
}
}
}
}
文本字段还存储了词频和短语的位置信息,假如你不需要执行短语查询,也可以让ES不存位置信息
PUT index
{
"mappings": {
"type": {
"properties": {
"foo": {
"type": "text",
"index_options": "freqs"
}
}
}
}
}
又或者你根本就不关心评分,你可以让ES只是匹配索引的term,这样的话短语查询的出错率会变高,评分也会假设每个词条在每个文档上只出现了一次
PUT index
{
"mappings": {
"type": {
"properties": {
"foo": {
"type": "text",
"norms": false,
"index_options": "freqs"
}
}
}
}
}
#不要使用默认的动态模板建立索引
keyword就是完全匹配的,text是分词类型的,话说这个东西在6.0就会被移除了,ES真是完全就不考虑向下兼容么。。。
默认的动态字符串模板会把字符串的文本和关键字都索引起来,假如你只需要其中一个的话,这就有点浪费。例如id只需要索引为keyword,而文本内容只需要被存成text字段 这个选项可以在模板里面操作或者在索引配置里面操作
PUT index
{
"mappings": {
"type": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
}
#禁用_all _all
字段存储了文档的所有信息,假如你不需要一次搜素所有的字段,禁用掉它
#使用 best_compression 选项 使用这个选项能使得索引得到更加有效的压缩
#使用最小的数值类型 根据实际使用情况,整形就存在整形类型上,比较小的float就使用scaled_float
或者更小的话就使用half_float
,这都能有效的节省存储