"created_time": {
    "type": "date",
    "format”:”yyyy-MM-dd'T'HH:mm:ssZZ”
}Elasticsearch 你该知道的事
| Note | ES的默认刷新时间  | 
最佳实践
注意
- 
数据库应该是ES数据的来源,应该避免从ES中取回数据修改后再写入 
- 
ES中只存储需要检索的字段,通过ES获取到Id,再根据Id从数据库中获取数据 
- 
所有字段都存储了源数据,才能使用update, 否则字段会丢失 
- 
ES只允许新增字段 (lucene决定的) 
- 
es的source是单独作为一个字段存储的,而且是保持传入的样式原样保存,假设字段A类型为long,如果传入的 doc={A: "12345"},即使A为string类型也是可以正确录入的,但是返回的source中字段A还是保持string形式"12345",不会转换成配置的long类型。
- 
bool query中的should默认不做必须命中要求(只有should条件除外),bool filter中的should必要至少命中其中一个子条件。 
- 
ES在未设置获取记录条数的时候,默认只返回10条 
- 
如果ES中需要传入时间,记得带上时区 
private static final Gson GSON = new GsonBuilder().registerTypeAdapter(Date.class, new UtcDateTypeAdapter()).create();运维优化
- 
使用SSD 
- 
使用ES自动生成的Id或者数据库中的自增Id,避免使用UUID-4, UUID-4是随机字符串压缩率较低 
索引优化
{
    "persistent" : {
        "indices.store.throttle.max_bytes_per_sec" : "100mb"
    }
}- 
段合并速度限制,默认的设置是 20M/s, 如果使用了SSD,可以设置为 100M/s 
- 
减少flush次数,配置translog大小阈值 
- 
减少refresh的次数,如果实时性要求不高的时候,可以设置较长的 refresh_interval时间
- 
减少副本数量 number_of_replicas,副本可以保证集群可用性,搜索并发数,但是会严重降低写效率
查询优化
- 
选择每次查询都会携带、且基本不会更新的字段作为routing 
- 
增加副本梳理,副本可以参与查询,提高搜索吞吐量 
- 
对于不需要评分的字段使用filter来查询 
数据导入
- 
刷新时间改为 -1 
- 
将副本数设置为 0 
- 
使用bulk request 
- 
数据的全量导入一般ES写入速度是个瓶颈,使用生产消费者模式可以加快导入速度 
浏览 24392 次