3

この Elastic Search ドキュメントに従って、「連絡先」という名前の Elastic Search インデックスのマッピングを作成しています。

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-put-mapping.html

コードを実行すると、

マッピングの作成に失敗しました: 検証に失敗しました: 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();
}
4

1 に答える 1