miller
发布于

得物社区亿级 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 才是最适合的存储方式。

浏览 (516)
点赞
收藏
评论