Elasticsearch删除映射属性

时间:2013-04-22 20:56:38

标签: json rest lucene elasticsearch

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

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

来自第二个链接:

  

“允许删除映射(类型)及其数据.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的所有数据都将通过索引删除。

3 个答案:

答案 0 :(得分:15)

你做不到。忘记这个值存在... ;-) 如果您确实需要将其删除,则必须重新索引文档。

答案 1 :(得分:6)

您可以使用新的_reindex api,甚至可以在运行reindex之前将新的_mapping输入到dest索引,这样您就可以更改索引中字段的属性。 / p>

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

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

如果您将此项与_aliases API结合使用,则可以修改索引而不会出现“停机时间”

答案 2 :(得分:4)

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