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();  //提交請求

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM