首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置index.max_terms_count没有影响?

设置index.max_terms_count没有影响?
EN

Stack Overflow用户
提问于 2019-02-04 16:46:00
回答 1查看 1.5K关注 0票数 3

我在用index.max_terms_count做实验。我尝试执行一个包含超过65536个术语的术语查询,而且我惊讶地看到它实际上被执行了,因为我阅读了警告这里

使用大量术语执行术语查询请求可能非常慢,因为每个附加项都需要额外的处理和内存。为了防止这种情况,可以直接或通过查找在术语查询中使用的最大术语数仅限于65536。可以通过索引设置index.max_terms_count来更改特定索引的默认最大值。

为了进一步测试它,我尝试将index.max_terms_count设置为2或3,但它仍然没有按照我预期的方式工作。你能帮我理解我做错了什么吗?

步骤:

  1. 使用Docker运行ES: 1.1.码头拉拔docker.elastic.co/elasticsearch/elasticsearch:6.6.0 1.2。docker运行-p 9200:9200 -p 9300:9300 -e“single y.type=单节点”-e
  2. 索引文档: curl -X POST 文件/1 -H 'Content-Type: application/json‘-d '{“用户”:"kimchy","post_date“:"2009-11-15T14:12:12","message”:“试用Elasticsearch",”标签“:"foo","bar","sun",”云“}
  3. 更改设置: curl -X PUT 设置 -H 'Content-Type: application/json‘-d '{ "index“:{ "max_terms_count”:2 }’
  4. 应用了验证设置:curl -X GET http://localhost:9200/twitter/_settings
  5. 执行搜索: curl -X POST '搜索?很漂亮‘-H’内容-Type: application/json‘-d '{“查询”:{“术语”:{“标签”:“太阳”,“多云”,“哟”,“嗨”,“你好”} }’
EN

回答 1

Stack Overflow用户

发布于 2022-07-18 07:37:33

在ElasticSearch Version7.0之后,index.max_terms_count的默认值是65536,如果使用默认的max_terms_count设置向terms命令提供超过65536的附加输入的话。例如,65537,它将产生下面的异常消息

代码语言:javascript
复制
{
  "error" : {
    "root_cause" : [
      {
        "type" : "query_shard_exception",
        "reason" : "failed to create query: The number of terms [65537] used in the Terms Query request has exceeded the allowed maximum of [65536]. This maximum can be set by changing the [index.max_terms_count] index level setting.",
        "index" : "my_index",
        "index_uuid" : "iJMNOR7znSsmODsG4uArTvQ"
      },
      ....
    ....
    ...
}

弹性搜索提供了一种将max_terms_count提高到2147483647的方法。为了测试目的,我试着把它设置为2147483647,它运行得很好。

代码语言:javascript
复制
PUT /my-index/_settings
{
    "index" : {
        "max_terms_count" :  2147483647  
     }
}

但是当我开始将值增加到2147483648时失败了

代码语言:javascript
复制
PUT /my-index/_settings
{
    "index" : {
        "max_terms_count" :  2147483648  
     }
}



{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "Failed to parse value [2147483648] for setting [index.max_terms_count]"
      }
    ],
    "type" : "illegal_argument_exception",
    "reason" : "Failed to parse value [2147483648] for setting [index.max_terms_count]",
    "caused_by" : {
      "type" : "number_format_exception",
      "reason" : "For input string: \"2147483648\""
    }
  },
  "status" : 400
}

因此,max_terms_count在查询期间确实扮演了一个角色,您的index.max_terms_count基于您的配置(不管是否默认)都具有效果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54520671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档