一、獲取類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();
請注意,您不能同時提供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
批量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(); //提交請求