elasticsearch花在build_scorer上的所有时间

时间:2017-12-19 11:23:02

标签: elasticsearch lucene

当我们将ES从ES 1.4升级到ES 5.2时,我们遇到了类似查询的性能问题:

{
  "_source": false,
  "from": 0,
  "size": 50,
  "profile": true,
  "query": {
    "bool": {
      "filter": [
        {
          "ids": {
            "values": [<list of 400 ids>],
            "boost": 1
          }
        }
      ],
      "should": [
        {
          "terms": {
            "views": [ <list od 20 ints> ]
    }
      ]
      "minimum_should_match": "0",
      "boost": 1
    }
  }
}

在进行性能分析时,我们发现了build_scorer的问题,它调用了每个段:

1个碎片;

20段;

采取:55

{
    "type": "BooleanQuery",
    "description": "views:[9875227 TO 9875227] views:[6991599 TO 6991599] views:[6682953 TO 6682953] views:[6568587 TO 6568587] views:[10080097 TO 10080097] views:[9200174 TO 9200174] views:[9200174 TO 9200174] views:[10080097 TO 10080097] views:[9966870 TO 9966870] views:[6568587 TO 6568587] views:[6568587 TO 6568587] views:[8538669 TO 8538669] views:[8835038 TO 8835038] views:[9200174 TO 9200174] views:[7539089 TO 7539089] views:[6991599 TO 6991599] views:[8222303 TO 8222303] views:[9342166 TO 9342166] views:[7828288 TO 7828288] views:[9699294 TO 9699294] views:[9108691 TO 9108691] views:[9431297 TO 9431297] views:[7539089 TO 7539089] views:[6032694 TO 6032694] views:[9491741 TO 9491741] views:[9498225 TO 9498225] views:[8051047 TO 8051047] views:[9866955 TO 9866955] views:[8222303 TO 8222303] views:[9622214 TO 9622214]",
    "time": "39.70427700ms",
    "breakdown": {
        "score": 99757,
        "build_scorer_count": 20,
        "match_count": 0,
        "create_weight": 37150,
        "next_doc": 0,
        "match": 0,
        "create_weight_count": 1,
        "next_doc_count": 0,
        "score_count": 110,
        "build_scorer": 38648674,
        "advance": 918274,
        "advance_count": 291
    },

因此build_scorer占用了总共55毫秒的38毫秒,似乎已经过了。

在ES 1.5上,我们有大约相同数量的段,但查询运行速度提高了10倍 不幸的是,ES 1.x没有分析器来检查build_scorer在ES 1.x中执行的次数

所以问题是为什么build_scorer_count等于段数以及我们如何解决这个性能问题?

0 个答案:

没有答案
相关问题