一、获取类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(); //提交请求