得物社区亿级 ES 数据搜索性能调优实践(转)
ES 搜索优化,
一般按产品需求,需要 order by createtime desc limit 10 再进行翻页
方案: 开启索引排序
- 代价 就是写入会慢点
{
"settings": {
"index": {
"sort.field": "publish_time", // 可指定多个字段
"sort.order": "desc"
}
},
"mappings": {
"properties": {
"content_id": {
"type": "long"
},
"publish_time": {
"type": "long"
},
...
}
}
}
针对大结果集的排序取前 N 条的场景下,索引排序能显著提高搜索性能。
索引排序只能在创建索引时指定,不可更改。如果你有多个指定字段排序的场景,可能需要慎重选择排序字段。
不获取总数能更好的利用索引排序。
开启索引排序会一定程度降低写性能。 这里贴一条 ElaticsearchBenchmarks 的数据截图供大家参考。
优化建议:
keyword: 不是所有的数字都应该按照数值字段来存,如果你的数字值很少用于范围查询,但是经常被用作 term 查询,并且对搜索 rt 很敏感。那么 keyword 才是最适合的存储方式。