当前位置: 首页 > 知识库问答 >
问题:

在elasticsearch中交换字段名

奚卓
2023-03-14

在elasticsearch的索引中有两个字段field1和field2

我需要重命名字段1到字段2,我也想重命名字段2到字段1

这就是我当前映射的样子,我已经为此映射索引了许多文档

{
  "mappings": {
    "properties": {
      "field1": {
        "type": "text"
      },
      "field2" : {
        "type" : "completion"
      }
    }
  }
}

我需要下面的地图

{
  "mappings": {
    "properties": {
      "field1": {
        "type": "completion"
      },
      "field2" : {
        "type" : "text"
      }
    }
  }
} 

是否有任何可能,我可以重命名字段和做重新索引?

我使用的是elasticsearch 7.4版

共有1个答案

苏宏逸
2023-03-14

是的,您可以使用查询更新API实现这一点,如下所示:

POST index/_update_by_query
{
  "script": {
    "source": "def tmp1 = ctx._source.field2; ctx._source.field2 = ctx._source.field1; ctx._source.field1 = tmp1;",
    "lang": "painless"
  }
}
 类似资料:
  • 问题内容: 我有这样的文件 我需要更改为 为此,首先将字段映射添加到现有索引 然后尝试重新索引 错误是 问题答案: 该字段在您的文档中尚不存在,因此您的脚本需要首先创建它: 或更短一些:

  • 我目前正在学习一些关于elasticsearch的知识,现在我试图从searchResponse中获取特定的字段,我使用以下代码: 所以我想问的是我如何从所有这些数据中获得特定的字段,我的数据库由ElasticSearch文档中的Shakespeare.json aviable组成,并且是这样形成的 这些是我使用的参数,以防有人感兴趣 这就是在浏览器中看到响应的方式,任何答案或提示或任何东西都被很

  • 问题内容: 为什么在能够过滤查询时无法看到_timestamp字段? 以下查询返回正确的文档,但不会返回时间戳本身。如何返回时间戳? 映射为: 样本输出: 问题答案: 启用时间戳字段后,默认情况下会对其进行索引但不存储。因此,尽管您可以通过时间戳字段进行搜索和过滤,但是您无法轻松地通过记录来检索它。为了能够检索时间戳字段,您需要使用以下映射重新创建索引: 这样,您将能够检索到时间戳记以来的毫秒数。

  • Sup社区。我有个问题。我正在使用Elasticsearch 6.4 我的数据结构的一部分: 我需要得到按成本排序的文档desc,我需要排序dirs字段中的值date_by字段与nulls-first。 如何对嵌套字段内的值进行排序,而不按此嵌套字段对文档进行排序?

  • 问题内容: 根据官方的es文档,禁用交换是Elasticsearch可获得的最佳性能提升之一。 但是,事实证明配置起来很困难。我花了很多时间研究并尝试使用不同的方法来使用Kubernetes上的官方ES docker镜像禁用交换。 设置为环境变量时,映像无法启动,并显示错误:。正如文档所指出的那样,这是意料之中的。我什至用设置挂载了一个自定义,但是失败了。 在k8s上使用官方es映像时,建议的禁用

  • 我有以下ElasticSearch DSL查询 我希望在与字段匹配时提高得分,也希望在字段匹配时降低得分。 我试过很多事情,比如: 或 但不能让它工作。我也尝试过将should和must等结合起来,但并没有走得太远--甚至不值得分享。有没有一种简单的方法可以做到这一点,而不需要重新对我所有的文档进行重新德行/重新打分?使用ES查询(而不是ES-DSL)的答案也会很有帮助。