web-dev-qa-db-ja.com

Elasticsearchのマッピングプロパティの削除

Elasticsearchインデックス内の特定のプロパティのすべてのエントリを削除し、そのプロパティのすべてのタイプマッピングを削除する方法を見つけようとしています。

私は次の2つのドキュメントページを見てきました: マッピングを置くマッピングを削除する

2番目のリンクから:

「マッピング(タイプ)とそのデータの削除を許可します。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のすべてのデータはインデックスから削除されます。

17
Ryan R.

それをしてはいけない。この値が存在することを忘れてください... ;-)本当に削除する必要がある場合は、ドキュメントのインデックスを再作成する必要があります。

18
dadoonet

これには新しい_reindex apiを使用できます。また、インデックスの再作成を実行する前に、新しい_mappingをdestインデックスに配置して、インデックスのフィールドのプロパティを変更することもできます。

インデックスの再作成とプロパティの削除を行うには、次のようにします。

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

これを _ aliases API と組み合わせて使用​​する場合は、「ダウンタイム」なしでインデックスを変更できます。

現在、マッピングからプロパティを削除することはできません。すべてのレコードからプロパティのすべての値を削除するには、このプロパティを削除してすべてのレコードのインデックスを再作成する必要があります。

4
imotov