22

我试图找出一种方法来删除弹性搜索索引中特定属性的所有条目并删除该属性的所有类型映射。

我一直在看以下两个文档页面:放置映射删除映射

从第二个链接:

“允许删除映射(类型)及其数据。REST 端点是 /{index}/{type} 和 DELETE 方法。”

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

我是否需要重新创建整个索引来完成此操作,即在类型之间移动和操作数据?

例如,在映射上调用 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都将通过索引删除。

4

3 回答 3

20

你不能这样做。只是忘记这个值存在...... ;-) 如果你真的需要删除它,你将不得不重新索引你的文档。

于 2013-04-22T21:16:05.237 回答
12

您可以为此使用新的_reindexapi,您甚至可以_mapping在运行重新索引之前将新的 dest 索引放入,这样您就可以更改索引中字段的属性。

要重新索引并删除属性,您可以这样做:

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

如果您将它与_aliases API结合使用,您可以修改索引而无需任何“停机时间”

于 2016-08-10T12:57:47.990 回答
4

目前无法从映射中删除属性。为了从所有记录中删除某个属性的所有值,您需要重新索引删除此属性的所有记录。

于 2013-04-22T21:15:51.360 回答