ElasticSearch 1.x を (幸いなことに) 1 年以上実行しました。いよいよ 2.1.x へのアップグレードです。ノードをオフにしてから (1 つずつ) 再度オンにする必要があります。簡単そうです。
しかし、その後、私はトラブルに遭遇しました。主な問題は_uid
、ランダムな他のドキュメントから (値をハッシュすることによって) ドキュメントの正確な場所を知るために自分で作成したフィールドです。このようにして、正確なものだけが返されることを知っていました。アップグレード中に私が得た
MapperParsingException[Field [_uid] is a metadata field and cannot be added inside a document. Use the index API request parameters.]
しかし、前者_uid
を_id
(これで十分なはずです) にマップしようとすると、似たような結果が得られます。
paramを使用した理由_uid
は、ルックアップ時間が termsQuery (など) よりもはるかに短いためです。特定の正確なドキュメントを高速 (かつ正確) に検索するために、各ドキュメントでorフィールド
を引き続き使用するにはどうすればよいですか? 一度に何千もの正確なものを呼び出す必要があることに注意してください。そのため、ID のようなクエリが必要です。また、ドキュメントのorが存在しない場合もあります (その場合、今のように「偽のような」結果が必要です)_uid
_id
_uid
_id
注: 1.x から 2.x へのアップグレードはかなり大規模です (フィルターがなくなり、名前にドットがなく、へのデフォルト アクセスがありません_xxx
) 。
更新 (役に立たない):
マッピングの更新_uid
または_id
使用:
final XContentBuilder mappingBuilder = XContentFactory.jsonBuilder().startObject().startObject(type).startObject("_id").field("enabled", "true").field("default", "xxxx").endObject()
.endObject().endObject();
CLIENT.admin().indices().prepareCreate(index).addMapping(type, mappingBuilder)
.setSettings(Settings.settingsBuilder().put("number_of_shards", nShards).put("number_of_replicas", nReplicas)).execute().actionGet();
結果:
MapperParsingException[Failed to parse mapping [XXXX]: _id is not configurable]; nested: MapperParsingException[_id is not configurable];
更新:後者は#から構築されているため、名前を_id
の代わりに に変更しました。それで、私はに書き込むことができる必要があります。_uid
_type
_id
_id