elasticSearch Alternatively use a keyword field instead.

编程入门 行业动态 更新时间:2024-10-23 03:15:52

elasticSearch Alternatively use a keyword field instead

    • 情景再现
    • 原因分析

情景再现

索引user中有三个字段,根据age进行排序查询出现的问题

GET /user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

然后就抛出来这么大一串的日志信息

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "user",
        "node": "oPHyvjEKR1u6ltdy9L2nsQ",
        "reason": {
          "type": "illegal_argument_exception",
          "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
        }
      }
    ],
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.",
      "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
      }
    }
  },
  "status": 400
}

原因分析

我们可以查看创建的索引的映射信息
查询映射

GET /user/_mapping

{
  "user" : {
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
			省略。。。。。。
        }
      }
    }
  }
}

我们可以查询age的字段类型type ,是text,这个是不支持排序操作的,需要设置type位keyword才可以
也就是重新创建映射
第二种解决方案,就是直接指定是age的keyword进行查询

GET /user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age.keyword": {
        "order": "desc"  
      }
    }
  ]
}

更多推荐

elasticSearch Alternatively use a keyword field instead.

本文发布于:2023-06-10 16:29:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/620819.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Alternatively   elasticSearch   field   keyword

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!