translog一致性
- ES索引的一致性通过translog来保证,就是即使内存中的数据没有来的及写入磁盘,ES重启后也会从translog中恢复数据。
- 那么translog的一致性怎样保证呢?translog是日志文件,日志文件也有缓存,那么在translog在缓存时,OS挂了,怎么办?
- translog也会周期性的sync到磁盘,参数:index.gateway.local.sync 控制刷新频率,默认5S,也就意味着极端情况下会丢失5S钟的事务数据。
- 可以根据实际情况改这个参数,越小越安全,但是性能也越差。
_all和_source系统字段
- _all 里存储着全部数据,搜索时不指明具体字段时就会搜索这个字段内的数据。
如果不需要,可以禁用掉:
"_all": { "enabled": false }
_source 里存储着这条记录的json内容,索引搜索时都用不到这个值,fetch时会从这里取字段数据,如果屏蔽掉,query出的结果就只有_id,啥都看不到,象时间序列DB等特殊场景下为提高性能可以使用,但象ELK这种系统,意义不大。
"_source": { "enabled": false }
动态模板映射match,unmatch
- 有时我们可能希望某一index/type下的某一批特定字段有相同的映射属性,那如果一个字段一个字段写就很麻烦。
这时可以使用dynamic_templates的match,unmatch功能:
PUT my_index { "mappings": { "my_type": { "dynamic_templates": [ { "longs_as_strings": { "match_mapping_type": "string", "match": "long_*", "unmatch": "*_text", "mapping": { "type": "long" } } } ] } } } PUT my_index/my_type/1 { "long_num": "5", "long_text": "foo" }
这个映射的意思就是:所有以long开头的,并且不是以text结果的字段类型都设置为long类型。
long_num字段是long
long_text字段是默认的sring