ES数据库 经常使用 java api

1、获取类api

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

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

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

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

二、选项是在不一样的线程上执行操做,或者在调用线程上执行它(注意API仍然是异步的)。默认状况下,operationThreaded设置为true表示在不一样的线程上执行操做。如下示例将其设置为 false服务器

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

2、删除类api

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

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

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

二、选项是在不一样的线程上执行操做,或者在调用线程上执行它(注意API仍然是异步的)。默认状况下,operationThreaded设置为true表示在不一样的线程上执行操做。如下示例将其设置为 falseide

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

3、经过查询api删除

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

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

由于它能够是一个长时间运行的操做,若是你想异步地执行它,你能够调用execute而不是get 提供一个监听器,如:ui

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
        }
    });

4、更新api

您能够建立UpdateRequest并将其发送到客户端:spa

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"
}

5、批量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();  //提交请求
相关文章
相关标签/搜索