elasticsearch,Performance,Sorting,elasticsearch" /> elasticsearch,Performance,Sorting,elasticsearch" />

Performance 弹性搜索中的排序

Performance 弹性搜索中的排序,performance,sorting,elasticsearch,Performance,Sorting,elasticsearch,以下是保存在我的索引中的文档的数据模型:{“messageId”:1,“commentId”:1,“likes”:1,“stars”:1,“time”:以毫秒为单位的时间,“category”:1,“deleted”:false,“userid”:1} 每条消息都有多条评论(在我的例子中大约有2000条) 基于messageId路由的索引文档。 我目前有2亿条大小为31GB的记录 碎片数量:5 复制品数量:3 (180总商店规模) 节点数:4。每个节点都有8GB的ram,其中我使用4GB进行e

以下是保存在我的索引中的文档的数据模型:
{“messageId”:1,“commentId”:1,“likes”:1,“stars”:1,“time”:以毫秒为单位的时间,“category”:1,“deleted”:false,“userid”:1}

每条消息都有多条评论(在我的例子中大约有2000条) 基于messageId路由的索引文档。 我目前有2亿条大小为31GB的记录

  • 碎片数量:5
  • 复制品数量:3 (180总商店规模)
  • 节点数:4。每个节点都有8GB的ram,其中我使用4GB进行elasticsearch
我的基本读取操作包括为给定的
messageId
获取
commentid
,按喜欢、星星或时间排序

搜索查询:
curl-XGET localhost:9200/\u search?路由=${messageId}&q=messageId:${messageId}&sort=likes:desc&fields=commentId&\u source=false

当我使用1500个线程运行性能测试时,平均花费的时间是6秒,90%大约是20秒!这是客户端的值。响应对象中的take值根据负载的不同从10ms到15s不等


如何提高读取性能?

您可能已达到群集的内存限制。您应该启用Java GC日志记录(例如,使用
ES\u USE\u GC\u logging
)并查看是否在GC中花费了大量时间

听起来您的性能测试正在创建大量的同时请求。你可能正在填补你的空缺。看看:

$ curl -XGET "http://localhost:9200/_nodes/stats/thread_pool?pretty"

最后,听起来你有相对较多的碎片。(或)。如果您有
index.number\u的\u副本:3
,则可以设置
index.number\u的\u碎片:1
,仍然可以获得完整的群集利用率。

群集只有1个索引