Elasticsearch中Java Rest Client中的批量操作

时间:2017-03-01 23:05:24

标签: java elasticsearch elasticsearch-java-api

我正在使用Java Rest客户端进行弹性搜索 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html 但无法找到批量插入或更新的方法。如何批量使用此客户端?

3 个答案:

答案 0 :(得分:1)

用于Elasticsearch的5.2 Java Rest客户端是基于字符串的,并且可以非常快速地变得混乱。对于Bulk操作尤其如此,因为它们是通过链接JSON对象构造的。

如果您希望/必须通过REST客户端连接到您的Elasticsearch集群,我建议改为使用JEST client

以下是有关如何将JEST客户端用于批量请求的示例:

// Construct a new Jest client according to configuration via factory
JestClientFactory factory = new JestClientFactory();
factory.setHttpClientConfig(new HttpClientConfig
                       .Builder("http://localhost:9200")
                       .multiThreaded(true)
                       .build());
JestClient client = factory.getObject();

// Construct Bulk request from articles
Bulk bulk = new Bulk.Builder()
                .defaultIndex("twitter")
                .defaultType("tweet")
                .addAction(Arrays.asList(
                    new Index.Builder(article1).build(),
                    new Index.Builder(article2).build()))
                .build();

client.execute(bulk);

答案 1 :(得分:0)

如果您使用Java来使用Elasticsearch Server,我建议您使用Java API。您可以在这里接受它:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index.html

您可以在Document API / Bulk API中找到如何进行批量操作。

如果由于某种原因仍需要使用Java Rest客户端,则需要使用Elasticsearch的批量请求格式构建有效负载,以便能够执行请求。

请在此处了解如何构建批量请求格式: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html (基本上,它是从json对象列表构造的)

答案 2 :(得分:0)

我正在使用.json文件中的数据。

Elasticsearch版本: 6.8.0

pom.xml:

<dependencies>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>6.8.0</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>6.8.0</version>
    </dependency>

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>`

Java

String bulkContent = new String(Files.readAllBytes(new File(filePath).toPath())); HttpEntity entity = new NStringEntity(bulkContent, ContentType.APPLICATION_JSON); Request request = createRequest(indexName, indexType, httpMethod, entity); RestClient restClient = RestClient.builder(new HttpHost(hostname, port, scheme)).build(); Response response = restClient.performRequest(request);