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();
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
表示在不一樣的線程上執行操做。如下示例將其設置爲 false
:ide
DeleteResponse response = client.prepareDelete("twitter", "tweet", "1") .setOperationThreaded(false) .get();
經過查詢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 } });
您能夠建立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();
請注意,您不能同時提供script
和doc
。
經過腳本更新:
更新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容許在單個請求中索引和刪除多個文檔。如下是一個示例用法:
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(); //提交請求