ElasticSearch客户端注解使用介绍

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: The best elasticsearch highlevel java rest api-----bboss 1.ElasticSearch客户端bboss提供了一系列注解 @ESId  用于标识实体对象中作为docid的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,默认为true-保存,false不保存,字段名称为属性名称。
The best elasticsearch highlevel java rest api----- bboss

1.ElasticSearch客户端bboss提供了一系列注解
@ESId  用于标识实体对象中作为docid的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,默认为true-保存,false不保存,字段名称为属性名称。ESId可用于添加和修改文档;readSet属性:默认false,设置为true时,检索的时候会将文档id设置到被注解的对象属性中

@ESParentId 用于标识实体对象中作为parentid的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,默认为true-保存,false不保存,字段名称为属性名称。ESParentId可用于添加和修改文档;readSet属性:默认false,设置为true时,检索的时候会将文档parentid设置到被注解的对象属性中

@ESVersion 用于标识实体对象中作为文档版本信息的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,true-保存,默认为false不保存,字段名称为属性名称。ESVersion可用于添加/修改文档操作

@ESVersionType 用于标识实体对象中作为文档版本类型信息的属性,该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,true-保存,默认为false不保存,字段名称为属性名称。ESVersionType可用于添加/修改文档操作

@ESRetryOnConflict 用于标识实体对象中作为文档修改操作版本冲突重试次数信息的属性,数字类型。该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,true-保存,默认为false不保存,字段名称为属性名称。ESRetryOnConflict可用于添加/修改文档操作

@ESRouting  用于标识实体对象中作为文档添加/修改操作路由信息的属性,字符串或者数字类型。该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,true-保存,默认为false不保存,字段名称为属性名称。ESRouting可用于添加/修改文档操作

@ESDocAsUpsert 用于标识实体对象中控制文档修改操作时,文档不存在时是否添加文档的信息的属性,布尔值。该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,true-保存,默认为false不保存,字段名称为属性名称。ESDocAsUpsert可用于添加/修改文档操作

@ESSource 用于标识实体对象中控制文档修改操作时,返回值是否包含文档source数据的控制变量的属性,布尔值。该注解只有一个persistent 布尔值属性,用于控制被本注解标注的字段属性是否作为普通文档属性保存,true-保存,默认为false不保存,字段名称为属性名称。ESSource可用于修改文档操作

@Column 该注解用于指定日期格式,和JsonFormat属性结合一起使用:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
@Column(dataformat = "yyyy-MM-dd HH:mm:ss.SSS")

@JsonIgnore 标注实体属性不作为es字段保存,使用示例:

@JsonIgnore
private Integer sqlEndElapsed;


2.注解的使用示例
@ESId(persistent = false)
protected String id;
@ESParentId
protected String parentId;
@ESVersion
protected int version;
@ESVersionType
protected String versionType;
@ESRetryOnConflict
protected int retryOnConflict;
@ESRouting
protected String routing;
@ESDocAsUpsert
protected boolean docAsUpsert;
@ESSource
protected boolean returnSource;

3.结合控制注解的批量文档修改操作
   
 @Test
	public void testOrmBulk(){
		ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
		List<OnlineGoodsInfoUpdateParams> onlineGoodsInfoUpdateParamss = new ArrayList<>();
		OnlineGoodsInfoUpdateParams onlineGoodsInfoUpdateParams = new OnlineGoodsInfoUpdateParams();
		onlineGoodsInfoUpdateParams.setId("aa");
		onlineGoodsInfoUpdateParams.setParentId("ppaa");
		onlineGoodsInfoUpdateParams.setType("tt");
		onlineGoodsInfoUpdateParams.setIndex("ddd");

		onlineGoodsInfoUpdateParams.setGoodsName("dddd");
		onlineGoodsInfoUpdateParams.setDocAsUpsert(true);
		onlineGoodsInfoUpdateParams.setRetryOnConflict(3);
		onlineGoodsInfoUpdateParams.setReturnSource(true);
		onlineGoodsInfoUpdateParams.setRouting("test");
		onlineGoodsInfoUpdateParams.setVersion(1);
		onlineGoodsInfoUpdateParams.setVersionType(ClientInterface.VERSION_TYPE_INTERNAL);

		onlineGoodsInfoUpdateParamss.add(onlineGoodsInfoUpdateParams);

		onlineGoodsInfoUpdateParams = new OnlineGoodsInfoUpdateParams();
		onlineGoodsInfoUpdateParams.setId("aa");
		onlineGoodsInfoUpdateParams.setParentId("ppaa");
		onlineGoodsInfoUpdateParams.setType("tt");
		onlineGoodsInfoUpdateParams.setIndex("ddd");

		onlineGoodsInfoUpdateParams.setGoodsName("dddd");

		/**
		 * 设置更新文档控制变量
		 */
		onlineGoodsInfoUpdateParams.setDocAsUpsert(true);
		onlineGoodsInfoUpdateParams.setRetryOnConflict(3);
		onlineGoodsInfoUpdateParams.setReturnSource(true);
		onlineGoodsInfoUpdateParams.setRouting("test");
		onlineGoodsInfoUpdateParams.setVersion(1);
		onlineGoodsInfoUpdateParams.setVersionType(ClientInterface.VERSION_TYPE_INTERNAL);
		onlineGoodsInfoUpdateParamss.add(onlineGoodsInfoUpdateParams);
		String response = clientUtil.updateDocuments("aa","tt",onlineGoodsInfoUpdateParamss);
		System.out.println(response);
	}

我们可以看到执行updateDocuments方法时,生成的原生bulk报文如下,注意其中的控制参数信息:

{ "update" : { "_index" : "aa", "_type" : "tt", "_id" : "aa", "parent" : "ppaa", "_routing" : "test","retry_on_conflict":3,"_version":1,"_version_type":"internal" } }
{"doc":{"parentId":"ppaa","type":"tt","index":"ddd","routing":"test","goodsName":"dddd","brandId":0,"brandName":null,"shopCustomCategoryId":0,"goodsType":null,"quantityOfPacking":null,"freePostage":null,"postage":null,"goodsDescription":null,"packingDescription":null,"salesUnit":null,"minimumUnit":null,"minSalesPrice":0.0},"doc_as_upsert":true,"_source":true}
{ "update" : { "_index" : "aa", "_type" : "tt", "_id" : "aa", "parent" : "ppaa", "_routing" : "test","retry_on_conflict":3,"_version":1,"_version_type":"internal" } }
{"doc":{"parentId":"ppaa","type":"tt","index":"ddd","routing":"test","goodsName":"dddd","brandId":0,"brandName":null,"shopCustomCategoryId":0,"goodsType":null,"quantityOfPacking":null,"freePostage":null,"postage":null,"goodsDescription":null,"packingDescription":null,"salesUnit":null,"minimumUnit":null,"minSalesPrice":0.0},"doc_as_upsert":true,"_source":true}

reponse报文这里不做介绍,如果被标准的returnSource属性为true,那么在response中将包含文档的source字段信息。

4.参考资料
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html

https://my.oschina.net/bboss/blog/1556866

https://my.oschina.net/bboss/blog/1801273

开发交流
elasticsearch技术交流群:166471282

elasticsearch微信公众号:bbossgroups
img_a21db47cf20ac4820026d60bcb2b9470.jpe
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
6月前
|
存储 JSON Go
ElasticSearch的HTTP操作 和Go客户端
【2月更文挑战第13天】ElasticSearch的HTTP操作 和Go客户端操作
146 0
|
监控 Java fastjson
ES客户端spring-boot-starter-data-elasticsearch
SpringDataElasticsearch: ElasticsearchRepository ElasticsearchRestTemplate ElasticsearchOperations
276 0
|
6月前
|
NoSQL Java API
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
111 0
|
6月前
|
Java API
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
241 0
|
6月前
|
数据库 Python
Python-ElasticSearch客户端的封装(聚合查询、统计查询、全量数据)
Python-ElasticSearch客户端的封装(聚合查询、统计查询、全量数据)
126 0
|
JSON 自然语言处理 网络协议
【ElasticSearch从入门到放弃系列 六】Java客户端操作ElasticSearch
【ElasticSearch从入门到放弃系列 六】Java客户端操作ElasticSearch
224 0
|
JSON 自然语言处理 Java
来聊一聊 ElasticSearch 最新版的 Java 客户端
来聊一聊 ElasticSearch 最新版的 Java 客户端
|
索引 Python
Python Elasticsearch批量操作客户端2
Python Elasticsearch批量操作客户端
122 0
|
JSON 测试技术 数据格式
Python Elasticsearch批量操作客户端 1
Python Elasticsearch批量操作客户端
114 0
|
自然语言处理 数据可视化 JavaScript
从零搭建Web所需服务(二)安装Elasticsearch可视化客户端工具
在上一篇文章中,我们讲述了Elasticsearch是什么、以及它用来做什么、如何去配置的说明,那么我们仅仅安装上一堆数据还是会影响到我们的开发体验,那么我们现在就来安装一款可视化客户端工具,让ES数据变得能够更加清晰可见吧。
1060 0
从零搭建Web所需服务(二)安装Elasticsearch可视化客户端工具