在Elasticsearch中排序

时间:2015-01-19 10:41:36

标签: performance sorting elasticsearch

以下是我的索引中保存的文档的数据模型:{"messageId":1,"commentId":1,"likes":1,"stars":1,"time":time in ms,"category":1,"deleted":false,"userid":1}

每封邮件都有多条评论(在我的案例中约为2000条) 带有基于messageId的路由的索引文档。 我目前有2亿条31 GB的记录。

  • 否。碎片:5
  • 否。复制品:3 (整体商店面积180)
  • 否。节点:4。每个节点有8GB ram,其中我使用4GB用于elasticsearch。

我的基本阅读操作包括为按照喜欢或明星或时间排序的给定commentIds提取messageId

搜索查询: curl -XGET localhost:9200/_search?routing=${messageId}&q=messageId:${messageId}&sort=likes:desc&fields=commentId&_source=false

当我使用1500个线程运行性能测试时,平均花费的时间是6秒,90%是20秒左右!这是客户端的价值观。响应对象的获取值从10ms到15s不等,具体取决于负载。

如何提高阅读效果?

1 个答案:

答案 0 :(得分:0)

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

听起来您的性能测试正在创建大量的并发请求。您可能正在填写thread pools。看看:

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

最后,听起来你有相对大量的分片。 A shard is not free(或see this benchmark)。如果您有index.number_of_replicas: 3,则可以设置index.number_of_shards: 1并仍然获得完整的群集利用率。