如何在elasticsearch中配置“ search.max_open_scroll_context”?

时间:2019-05-05 06:22:11

标签: elasticsearch

我使用scroll在elasticsearch中获取数据(版本:7.0.0)。但是,当我使用它时,抛出了异常。

  • 请求:
GET /index-name/_search?scroll=1m
{
    "size": 100,
    "query": {
        "match_all" : {}
    }
}
  • 响应
{
  "error": {
    "root_cause": [
      {
        "type": "exception",
        "reason": "Trying to create too many scroll contexts. Must be less than or equal to: [500]. This limit can be set by changing the [search.max_open_scroll_context] setting."
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "nr-v1",
        "node": "jVqXndodRtqsZ4Srh9eHSg",
        "reason": {
          "type": "exception",
          "reason": "Trying to create too many scroll contexts. Must be less than or equal to: [500]. This limit can be set by changing the [search.max_open_scroll_context] setting."
        }
      }
    ]
  },
  "status": 500
}

然后我用GET /_nodes/stats/indices/search检查节点状态,响应:

{
  "_nodes": {
    "total": 3,
    "successful": 3,
    "failed": 0
  },
  "cluster_name": "bprc",
  "nodes": {
    "AdT9tX_jRqiuRyNnYunRdg": {
      "timestamp": 1557036722528,
      "name": "es2",
      "transport_address": "192.168.99.74:9300",
      "host": "192.168.99.74",
      "ip": "192.168.99.74:9300",
      "roles": [
        "master",
        "data",
        "ingest"
      ],
      "attributes": {
        "ml.machine_memory": "16819453952",
        "ml.max_open_jobs": "20",
        "xpack.installed": "true"
      },
      "indices": {
        "search": {
          "open_contexts": 502,
          "query_total": 3171,
          "query_time_in_millis": 2490,
          "query_current": 0,
          "fetch_total": 538,
          "fetch_time_in_millis": 951,
          "fetch_current": 0,
          "scroll_total": 2020,
          "scroll_time_in_millis": 1948250008,
          "scroll_current": 502,
          "suggest_total": 0,
          "suggest_time_in_millis": 0,
          "suggest_current": 0
        }
      }
    },
......

我的问题: 1.如何解决有关“尝试创建太多滚动上下文。必须小于或等于:[500]”的例外的问题。

  1.           "scroll_total": 2020,
              "scroll_time_in_millis": 1948250008,
              "scroll_current": 502
    

这三个属性的作用是什么?

2 个答案:

答案 0 :(得分:4)

我能够通过增加滚动上下文的最大数量来解决此问题:

curl -x "" -X PUT localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d'{
    "persistent" : {
        "search.max_open_scroll_context": 1024
    },
    "transient": {
        "search.max_open_scroll_context": 1024
    }
}'

答案 1 :(得分:0)

我遇到了同样的问题,我的解决方法是每次使用后都明确清除滚动​​

    ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
    clearScrollRequest.addScrollId(scrollId);
    restHighLevelClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT); 

请参阅https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-clear-scroll.html

,不需要更改max_open_scroll_context