ElasticSearch 150k查询需要几分钟

时间:2019-09-23 15:34:35

标签: elasticsearch

我正在尝试从ES查询大约15万个文档。我的150k文档总共有9.24GB的磁盘空间,我正在使用滚动API,每滚动获取10'000。查询并花费5分钟以上的时间,然后遇到内存问题(需要6GB以上的RAM)。现在,我尝试了几种方法:

_source:常规过滤。在每个文档的70个键值对中,我只需要4个字段

 {
  "size": 10000,
  "query": {
    "range": {
      "updateTime": {
        "lte": 10000000000000000
      }
    }
  },
  "_source": [
    "id.identifierOne",
    "id.identifierTwo",
    "arrivalTime",
    "updateTime"
  ],
  "sort": [
    "_doc"
  ]
}

_stored_field:为了省去完整文档的巨大开销,我在创建索引期间存储了4个字段

{
  "size": 100000,
  "stored_fields": [
    "updateTime",
    "id.identifierOne",
    "id.identifierTwo",
    "arrivalTime"
  ],
  "query": {
    "range": {
      "updateTime": {
        "lte": 10000000000000000
      }
    }
  },
  "sort": [
    "_doc"
  ]
}

两者运行时间相同。我在_source版本中发现的另一件奇怪的事情是,每滚动10,000次,就会导致下一批查询的查询时间更长,并增加了RAM。

我强烈怀疑我的配置或查询中有错误。等待几分钟似乎太长了。

我的配置是:仅在一个节点上有5个分片。带有6GB RAM的Pod可扩展到2CPU。索引创建就是这样

 {
      "mappings": {
        "doc": {
          "dynamic": "false",
          "properties": {
            "id.identifierOne": {
              "type": "long",
              "store": true
            },
            "id.identifierTwo": {
              "type": "text",
              "store": true
            },
            "arrivalTime": {
              "type": "long",
              "store": true
            },
            "updateTime": {
              "type": "long",
              "store": true
            }
          }
        },
  "settings" : {
    "index" : {
      "number_of_replicas" : 0
    }
  }
}

是否可以将查询时间减少到一分钟以内?

任何帮助或想法都受到高度赞赏。

0 个答案:

没有答案