You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询Elasticsearch中是否仍存在旧格式的_id字段值?

解决Elasticsearch查询旧格式_id的问题

因为Elasticsearch的_id是元字段,默认不属于text或keyword类型,所以无法直接用query_string的通配符查询。你可以通过以下两种方法解决:

方法1:使用脚本查询直接匹配_id内容

通过脚本访问文档的_id值并判断是否包含目标字符串,示例查询:

GET /你的索引名/_search
{
  "query": {
    "script": {
      "script": "doc['_id'].value.contains('WEDNESDAY')"
    }
  }
}

如果需要批量匹配所有星期几,可扩展脚本逻辑:

GET /你的索引名/_search
{
  "query": {
    "script": {
      "script": {
        "source": "def weekdays = ['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY']; for (day in weekdays) { if (doc['_id'].value.contains(day)) { return true; } } return false;"
      }
    }
  }
}

方法2:通过运行时字段转换_id类型

先创建一个运行时字段将_id转为keyword类型,再用wildcard查询:

GET /你的索引名/_search
{
  "runtime_mappings": {
    "id_keyword": {
      "type": "keyword",
      "script": "emit(doc['_id'].value)"
    }
  },
  "query": {
    "wildcard": {
      "id_keyword": "*WEDNESDAY*"
    }
  }
}

注意事项

  • 脚本查询会遍历所有文档,数据量大时性能较差,建议在测试环境或小数据量索引中使用。
  • 如果需要长期执行这类查询,可考虑在索引映射中添加永久字段,写入时同步_id的值(不过你已改为ES自动生成ID,该场景可能无需此操作)。

内容的提问来源于stack exchange,提问作者chimera_girl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:39:18