この Elastic Search ドキュメントに従って、「連絡先」という名前の Elastic Search インデックスのマッピングを作成しています。
コードを実行すると、
マッピングの作成に失敗しました: 検証に失敗しました: 1: マッピング タイプがありません。
これが私のコードです。
public void createElasticMapping() throws IOException {
RestHighLevelClient client = createHighLevelRestClient();
PutMappingRequest request = new PutMappingRequest("contacts");
ArrayList<Field> fields = new ArrayList<Field>();
fields.add(new Field("list_id", "integer"));
fields.add(new Field("contact_id", "integer"));
Map<String, Object> properties = new HashMap<>();
for (Field fieldToAdd : fields) {
Map<String, Object> fieldData = new HashMap<>();
fieldData.put("type", fieldToAdd.type);
properties.put(fieldToAdd.name, fieldData);
}
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("properties", properties);
request.source(jsonMap);
@SuppressWarnings("deprecation")
org.elasticsearch.action.support.master.AcknowledgedResponse putMappingResponse = client.indices()
.putMapping(request, RequestOptions.DEFAULT);
System.out.print(putMappingResponse);
client.close();
}
ドキュメントの例に従っているので、これは奇妙です。Java クライアントのバージョン 7.6.0 を使用しています。
アップデート。Java クライアントのバージョン 7.5.2 にダウングレードしたのは、これが Elastic Search デプロイメントのバージョンだからです。put mapping コマンドが機能するようになりました。ただし、非同期呼び出しを機能させることができません。その呼び出しのコメントを外すと、Eclipse は、この関数は非推奨であり、新しい関数を使用する必要があることを通知します。ただし、新しいメソッドは非推奨のメソッドと同じように見えます (同じパラメーター、同じ名前)。違いは何ですか?また、Eclipse に新しいバージョンを使用するように指示するにはどうすればよいでしょうか?
非推奨。このメソッドは、非推奨の機能であるタイプを参照する古いリクエスト オブジェクトを使用します。代わりに、新しいリクエスト オブジェクトを受け入れるメソッド putMappingAsync(PutMappingRequest, RequestOptions, ActionListener) を使用する必要があります。
同期のもののみ。
@POST
@Path("/mapping")
public void createElasticMapping() throws IOException {
RestHighLevelClient client = createHighLevelRestClient();
PutMappingRequest request = new PutMappingRequest("contacts");
ArrayList<Field> fields = new ArrayList<Field>();
fields.add(new Field("list_id", "integer"));
fields.add(new Field("contact_id", "integer"));
Map<String, Object> properties = new HashMap<>();
for (Field fieldToAdd : fields) {
Map<String, Object> fieldData = new HashMap<>();
fieldData.put("type", fieldToAdd.type);
properties.put(fieldToAdd.name, fieldData);
}
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("properties", properties);
request.source(jsonMap);
org.elasticsearch.action.support.master.AcknowledgedResponse putMappingResponse = client.indices()
.putMapping(request, RequestOptions.DEFAULT);
System.out.print(putMappingResponse);
// これは機能しない非同期呼び出しです。// client.indices().putMappingAsync(request, RequestOptions.DEFAULT, listener);
client.close();
}