• ES数据库 常用 java api


    一、获取类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();  //提交请求
  • 相关阅读:
    IOS中浏览器修改document.title不起作用
    he content must be served over HTTPS 解决方案
    Nuxt开发经验分享
    Nuxt插件-axios封装
    requestAnimationFrame & 定时器
    Vue 组件中data为什么是函数
    js-鸡兔同笼方程
    css技巧-清明追思-网站置灰
    详细分享TortoiseGit配置密钥的方法
    js
  • 原文地址:https://www.cnblogs.com/Ace-suiyuan008/p/10026816.html
Copyright © 2020-2023  润新知