ElasticSearch删除Map属性

pw9qyyiw  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(4)|浏览(207)

我正在尝试找到一种方法来删除ElasticSearch索引中特定属性的所有条目,并删除该属性的所有类型Map。

我一直在查看以下两个文档页面:put mappingdelete mapping

从第二个链接开始:
“允许删除Map(类型)及其数据。REST终结点为/{index}/{type}with Delete方法。”

我想我需要的是/{index}/{type}/{property}

我是否需要重新创建整个索引来实现这一点,即在类型之间移动和操作数据?

例如,对Map调用GET:

curl -XGET 'http://.../some_index/some_type/_mapping'

结果:

{
  "some_type": {
    "properties": {
      "propVal1": {
        "type": "double",
        "index": "analyzed"
      },
      "propVal2": {
        "type": "string",
        "analyzer": "keyword"
      },
      "propVal3": {
        "type": "string",
        "analyzer": "keyword"
      }
    }
  }
}

在对propVal3执行此删除操作后,将返回:

curl -XGET 'http://.../some_index/some_type/_mapping'

结果:

{
  "some_type": {
    "properties": {
      "propVal1": {
        "type": "double",
        "index": "analyzed"
      },
      "propVal2": {
        "type": "string",
        "analyzer": "keyword"
      }
    }
  }
}

并且propVal3的所有数据将通过索引被删除。

dddzy1tm

dddzy1tm1#

你不能这么做。忘记这个值是存在的.;-)如果您确实需要删除它,则必须对您的文档重新编制索引。

sxpgvts3

sxpgvts32#

为此,您可以使用新的_reindex API,甚至可以在运行reindex之前将新的_mapping放到DEST索引中,以便更改索引中的字段的属性。

要重新编制索引并删除属性,可以执行以下操作:

POST /_reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter",
  },
  "script": {
    "inline": "ctx._source.remove('whatever')"
  }
}

如果您要将其与_aliases API结合使用,则可以修改索引,而不会出现任何停机

chhkpiq4

chhkpiq43#

目前不能从Map中删除属性。为了从所有记录中删除属性的所有值,您需要在删除此属性的情况下对所有记录重新编制索引。

dhxwm5r4

dhxwm5r44#

您可以选择要为新索引重新编制索引的文档域。例如:

Post_reindex{“源”:{“index”:“my-source-index”,“_source”:[“host.host name”,“host.ip”,“Another_field”]},“est”:{“index”:“my-est-index”}}

参考文献:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html#docs-reindex-filter-source

相关问题