3

Elasticsearch(ES)マッピングのルーティングを明示的に無効にしました:

{
 "chow-clfg": {
  "_parent": {
   "type": "chow-demo"
  },
  "_routing": {
   "required": false
  },
  "_id": {
   "path": "clfg"
  },
  "dynamic": "true",
  "_ttl": {
   "enabled": true,
   "default": "1h"
  },
  "properties": {
   "clfg": {
    "analyzer": "keyword",
    "type": "string"
   },
   "@timestamp": {
    "format": "dateOptionalTime",
    "type": "date"
   },
   "count": {
    "type": "long"
   }
  }
 }
}

curlコマンドを実行して新しいマッピングを削除および更新した後も、_cluster/stateコマンドを実行するとルーティングが有効になります。

"mappings" : {
 "chow-clfg" : {
  "_id" : {
   "path" : "clfg"
  },
  "_routing" : {
   "required" : true
  },
  "_ttl" : {
   "enabled" : true,
   "default" : 3600000
  },
  "properties" : {
   "@timestamp" : {
    "format" : "dateOptionalTime",
    "type" : "date"
   },
   "clfg" : {
    "analyzer" : "keyword",
    "type" : "string"
   },
   "count" : {
    "type" : "long"
   }
  },
  "_parent" : {
   "type" : "chow-demo"
  }
}

したがって、次の質問が残ります。

  1. 親/子マッピングに必要な要件ではない場合、ルーティングを無効にするにはどうすればよいですか?
  2. ルーティングが必要な場合、一意ではないフィールドでルーティングを実行できますか?
4

1 に答える 1

3

子ドキュメントは、親ドキュメントと同じシャードに保存する必要があります。そのため、子ドキュメントのルーティングが必要です。デフォルトでは、ドキュメントはID値でルーティングされるため、子ドキュメントはルーティングに親のIDを使用します。あなたはそれを変えることができます。親とそのすべての子が同じルーティング値を使用している限り、問題はありません。ルーティングフィールドは一意である必要はありませんが、良好なパフォーマンスを実現するには、多かれ少なかれ均一に分散されている必要があります。そうしないと、1つのシャードに多数のレコードがあり、別のシャードには少数のレコードしかない場合があります。

于 2012-12-24T14:20:04.850 に答える