当前文章: 首页 >> 编程开发 >> JAVA >> ElasticSearch的upsert操作
聚划算
«   2019年11月   »
123
45678910
11121314151617
18192021222324
252627282930
云盾证书
网站分类
    海外云服务器CPS_轻量拓展全民云计算企业云服务器云盾证书
标签列表
最近发表

ElasticSearch的upsert操作

广告位250x250

官方文档:

Java API [7.4] » Document APIs » Update API

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-update.html


例子:

POST /collect/_doc/123/_update
{
   "script" : "ctx._source.browse += 1",
   "upsert": {
       "url": "http://www.example.com/123/456.html",
       "browse": 0,
	"time": "20191024190400"
   }
}


Java代码:

public class App {
	public static void main(String[] args) {
		RestHighLevelClient client = new RestHighLevelClient(
				RestClient.builder(new HttpHost("vir-centos7", 9200, "http")));
		//
		Map<String, Object> jsonMap = new HashMap<String, Object>();
		//
		jsonMap.put("last_time", new Date());

		//
		String id = "123";
		try {

			UpdateRequest request = new UpdateRequest("collect", id);

			// 存在时执行 doc
			// request.doc(jsonMap);
			
			// 存在时或执行script
			request.script(new Script("ctx._source.browse += 1"));

			// 不存在时执行
			jsonMap.put("url", "http://www.example.com/123/456.html");
			jsonMap.put("browse", 0);
			jsonMap.put("time", new Date());
			request.upsert(jsonMap);

			
			// 更新
			client.update(request, RequestOptions.DEFAULT);
			client.close();

		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}



总结 update用法:

  1. 如果document(服务器端数据)不存在,则执行upsert;

  2. 如果document(服务器端数据)存在,则执行doc或script;

       doc和script只能选择其中之一,如果2个都有,执行时会提示错误,如Java执行时提示以下错误:

org.elasticsearch.action.ActionRequestValidationException: Validation Failed: 1: can't provide both script and doc;
	at org.elasticsearch.action.ValidateActions.addValidationError(ValidateActions.java:26)
	at org.elasticsearch.action.update.UpdateRequest.validate(UpdateRequest.java:221)
	at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1420)
	at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394)
	at org.elasticsearch.client.RestHighLevelClient.update(RestHighLevelClient.java:883)
	at search.collect.App.main(App.java:47)


声明:本站原创文章,转载、复制、使用等请注明出处。
标题ElasticSearch的upsert操作
作者jues
地址: http://blog.jues.org.cn/post/elasticsearch-de-upsert-cao-zuo.html

发表评论:

Powered By Z-BlogPHP 1.5.2 Zero Powered By Z-BlogPHP © 2018 jues博客 Copyright Your WebSite.Some Rights Reserved.联系站长 Themes by jues