在Java API的Elastic Search中创建索引

时间:2013-05-20 12:19:51

标签: java elasticsearch

我使用以下代码在Elastic Search中创建索引, 默认JAVA API:

    Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "myClusterName").put("client.transport.sniff", true).build();
    Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("localhost", 9200));
    CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate("test1");
    CreateIndexResponse response = createIndexRequestBuilder.execute().actionGet();
    System.out.println(response.isAcknowledged());  

REST服务:

    HttpURLConnection con = null;
    try
    {
        String url = "http://localhost:9200/test2";

        URL resturl = new URL(url);
        con = (HttpURLConnection) resturl.openConnection();

        con.setDoOutput(true);
        con.setRequestMethod("PUT");
        BufferedReader in = null;
        try
        {
            if (con.getInputStream() != null)
            {
                in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            }
        }
        catch (IOException e)
        {
            if (con.getErrorStream() != null)
            {
                in = new BufferedReader(new InputStreamReader(con.getErrorStream()));
            }
        }
        if (in == null)
        {
            throw new Exception("Unable to read response from server");
        }
        StringBuffer decodedString = new StringBuffer();
        String line;
        while ((line = in.readLine()) != null)
        {
            decodedString.append(line);
        }
        in.close();
        System.out.println("4");
        Integer responseCode = con.getResponseCode();
        System.out.println(responseCode);
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
    finally
    {
        if (con != null)
        {
            con.disconnect();
        }
    }

通过使用REST API,我可以创建索引。默认情况下JAVA API, 我得到以下例外。

org.elasticsearch.client.transport.NoNodeAvailableException: No node available
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:202)
at org.elasticsearch.client.transport.support.InternalTransportIndicesAdminClient.execute(InternalTransportIndicesAdminClient.java:85)
at org.elasticsearch.client.support.AbstractIndicesAdminClient.create(AbstractIndicesAdminClient.java:200)
at org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder.doExecute(CreateIndexRequestBuilder.java:206)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:62)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:57)
at ElasticSearch.createIndex(ElasticSearch.java:121)
at ElasticSearch.main(ElasticSearch.java:157)

请指导我错误的地方。提前致谢

4 个答案:

答案 0 :(得分:9)

TransportClient的端口(通过Java API)与Http不同 默认情况下,transportClient端口为9300

答案 1 :(得分:7)

使用副本和分片设置:

Settings indexSettings = ImmutableSettings.settingsBuilder()
                 .put("number_of_shards", 1)
                 .put("number_of_replicas", 1)
                 .build();
CreateIndexRequest indexRequest = new CreateIndexRequest(index, indexSettings);
client.admin().indices().create(indexRequest).actionGet();

答案 2 :(得分:6)

鉴于你有客户,你不应该这样做:

CreateIndexResponse createResponse = client.admin().indices().create(createIndexRequest("test1")).actionGet();

答案 3 :(得分:0)

使用下面的代码使用JAVA高级别Rest Client可以创建索引。

 CreateIndexRequest request = new CreateIndexRequest("users");
        request.settings(Settings.builder()
                .put("index.number_of_shards", 3)
                .put("index.number_of_replicas", 2)
        );
        Map<String, Object> message = new HashMap<>();
        message.put("type", "text");   

        Map<String, Object> properties = new HashMap<>();
        properties.put("userId", message);
        properties.put("name", message);

        Map<String, Object> mapping = new HashMap<>();
        mapping.put("properties", properties);
        request.mapping(mapping);

        CreateIndexResponse indexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println("response id: "+indexResponse.index());

有关更多参考,请阅读: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-create-index.html#java-rest-high-create-index