一、获取类api

get API允许根据其id从索引中获取类型化的JSON文档。

以下示例从名为twitter的索引中获取一个JSON文档,该索引名为tweet,id值为1:

GetResponse response = client.prepareGet(“twitter”,“tweet”,“1”)。get();

1、get API允许设置线程模型,当在同一节点上执行API的实际执行时将执行操作(API在同一服务器上分配的分片上执行)。

2、选项是在不同的线程上执行操作,或者在调用线程上执行它(注意API仍然是异步的)。默认情况下,operationThreaded设置为true表示在不同的线程上执行操作。以下示例将其设置为 false

GetResponse response = client.prepareGet("twitter", "tweet", "1")
        .setOperationThreaded(false)
        .get();

二、删除类api

delete API允许用户根据其id从特定索引中删除类型化的JSON文档。以下示例从名为twitter的索引中删除JSON文档,该索引名为tweet,id为1:

DeleteResponse response = client.prepareDelete(“twitter”,“tweet”,“1”)。get();

1、delete API允许设置线程模型,当在同一节点上执行API的实际执行时,将执行操作(API在同一服务器上分配的分片上执行)。

2、选项是在不同的线程上执行操作,或者在调用线程上执行它(注意API仍然是异步的)。默认情况下,operationThreaded设置为true表示在不同的线程上执行操作。以下示例将其设置为 false

DeleteResponse response = client.prepareDelete("twitter", "tweet", "1")
        .setOperationThreaded(false)
        .get();

三、通过查询api删除

通过查询API删除允许人们根据查询结果删除给定的文档集:

BulkByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
    .filter(QueryBuilders.matchQuery("gender", "male")) //询问
    .source("persons")                           //指数       
    .get();                                             //执行
long deleted = response.getDeleted();   //删除的数据数

因为它可以是一个长时间运行的操作,如果你想异步地执行它,你可以调用execute而不是get 提供一个监听器,如:

DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
    .filter(QueryBuilders.matchQuery("gender", "male"))     //询问
    .source("persons")                                      //指数
    .execute(new ActionListener<BulkByScrollResponse>() {   //监听者
        @Override
        public void onResponse(BulkByScrollResponse response) {
            long deleted = response.getDeleted();           //已删除的文件数量
        }
        @Override
        public void onFailure(Exception e) {
            // Handle the exception
        }
    });

四、更新api

您可以创建UpdateRequest并将其发送到客户端:

UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index("index");
updateRequest.type("type");
updateRequest.id("1");
updateRequest.doc(jsonBuilder()
        .startObject()
            .field("gender", "male")
        .endObject());
client.update(updateRequest).get();

或者您可以使用prepareUpdate()方法:

client.prepareUpdate("ttl", "doc", "1")
        .setScript(new Script("ctx._source.gender = \"male\""  , ScriptService.ScriptType.INLINE, null, null))
        .get();

client.prepareUpdate("ttl", "doc", "1")
        .setDoc(jsonBuilder()               
            .startObject()
                .field("gender", "male")
            .endObject())
        .get();

请注意,您不能同时提供scriptdoc

通过脚本更新:

更新API允许基于提供的脚本更新文档:

UpdateRequest updateRequest = new UpdateRequest("ttl", "doc", "1")
        .script(new Script("ctx._source.gender = \"male\""));
client.update(updateRequest).get();

通过合并文档进行更新:

更新API还支持传递部分文档,该部分文档将合并到现有文档中(简单的递归合并,对象的内部合并,替换核心“键/值”和数组)。例如:

UpdateRequest updateRequest = new UpdateRequest("index", "type", "1")
        .doc(jsonBuilder()
            .startObject()
                .field("gender", "male")
            .endObject());
client.update(updateRequest).get();

Upsert

也有支持upsert。如果文档不存在,则upsert 元素的内容将用于索引新文档:

IndexRequest indexRequest = new IndexRequest("index", "type", "1")
        .source(jsonBuilder()
            .startObject()
                .field("name", "Joe Smith")
                .field("gender", "male")
            .endObject());
UpdateRequest updateRequest = new UpdateRequest("index", "type", "1")
        .doc(jsonBuilder()
            .startObject()
                .field("gender", "male")
            .endObject())
        .upsert(indexRequest);              //如果该文档不存在,indexRequest则将添加 该文档
client.update(updateRequest).get();

如果文档index/type/1已经存在,我们将在此操作后获得如下文档:

{
    "name"  : "Joe Dalton",
    "gender": "male"        //此字段由更新请求添加
}

如果它不存在,我们将有一个新文件:

{
    "name" : "Joe Smith",
    "gender": "male"
}

五、批量api

批量API允许在单个请求中索引和删除多个文档。以下是一个示例用法:

import static org.elasticsearch.common.xcontent.XContentFactory.*;

BulkRequestBuilder bulkRequest = client.prepareBulk();

// either use client#prepare, or use Requests# to directly build index/delete requests
bulkRequest.add(client.prepareIndex("twitter", "tweet", "1")
        .setSource(jsonBuilder()
                    .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "trying out Elasticsearch")
                    .endObject()
                  )
        );

bulkRequest.add(client.prepareIndex("twitter", "tweet", "2")
        .setSource(jsonBuilder()
                    .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "another post")
                    .endObject()
                  )
        );

BulkResponse bulkResponse = bulkRequest.get();
if (bulkResponse.hasFailures()) {
    // process failures by iterating through each bulk response item
}

可以使用BulkRequestBuilder来批量存储请求然后批量执行

BulkRequestBuilder nulk = client.prepareBulk();
bulk.add(updateRequest)  //可以是其他请求
BulkResponse resp = null;
resp = bulk.execute().get();  //提交请求

 

posted on 2018-11-27 15:51  落雨无晴  阅读(2804)  评论(0编辑  收藏  举报