ES-illegal_argument_exception报错

文章描述了一个在Elasticsearch中执行搜索查询时遇到的问题,由于尝试对text字段进行排序或聚合操作,导致了非法参数异常。解决方案是使用keyword字段或设置field_data为true,但后者可能消耗大量内存。文章提供了一个修正后的查询示例,将排序字段更改为name.keyword。
摘要由CSDN通过智能技术生成

查询语句:

POST food-ingredients-ext/_search
{
  "from": 0,
  "size": 20,
  "query": {
    "multi_match": {
      "query": "cake mix",
      "type": "phrase",
      "fields": [
        "manufacture",
        "brand",
        "name"
      ]
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "pre_tags": [
          "<em>"
        ],
        "post_tags": [
          "</em>"
        ]
      }
    }
  },
  "sort": [
    {
      "name": {
        "order": "asc"
      },
      "_score": {
        "order": "desc"
      }
    }
  ]
}

报错:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
      }
    ],
    "type" : "search_phase_execution_exception",
    "reason" : "all shards failed",
    "phase" : "query",
    "grouped" : true,
    "failed_shards" : [
      {
        "shard" : 0,
        "index" : "food-ingredients-ext",
        "node" : "XBz2-lMTTHaljuXUKeWzgw",
        "reason" : {
          "type" : "illegal_argument_exception",
          "reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
        }
      }
    ],
    "caused_by" : {
      "type" : "illegal_argument_exception",
      "reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory.",
      "caused_by" : {
        "type" : "illegal_argument_exception",
        "reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
      }
    }
  },
  "status" : 400
}

原因分析:text字段作为一个整体,默认没有索引。不过text分词之后的keyword是有索引的,因而可以对name.keyword进行聚合。

POST food-ingredients-ext/_search
{
  "from": 0,
  "size": 20,
  "query": {
    "multi_match": {
      "query": "cake mix",
      "type": "phrase",
      "fields": [
        "manufacture",
        "brand",
        "name"
      ]
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "pre_tags": [
          "<em>"
        ],
        "post_tags": [
          "</em>"
        ]
      }
    }
  },
  "sort": [
    {
      "name.keyword": {
        "order": "asc"
      },
      "_score": {
        "order": "desc"
      }
    }
  ]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yangkei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值