`

ElasticSearch客户端注解使用介绍

阅读更多
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
1
0
分享到:
评论

相关推荐

    spring mvc 集成elasticSearch 5.5.0版本

    接着,定义`User`实体类,并使用`@Document`注解标识为Elasticsearch文档: ```java @Document(indexName = "users", type = "user") public class User { @Id private Long id; private String username; ...

    spring-data-elasticsearch

    在Spring Data Elasticsearch中,这意味着开发者可以使用Elasticsearch特定的注解,例如@Document,来定义数据模型,并通过继承特定的仓库接口来实现数据操作。 2. ElasticsearchRepository接口:这是Spring Data为...

    SpringBoot 集成ElasticSearch两个依赖的jar

    下面将详细介绍如何在Spring Boot项目中集成这两个关键的Elasticsearch依赖,并探讨其工作原理。 首先,Spring Boot提供了对Elasticsearch的便捷支持,通过添加对应的起步依赖,我们可以快速地将Elasticsearch集成...

    elasticsearch-6.8.0+elasticsearch-analysis-ik-6.8.0 .zip

    通过添加依赖,可以轻松创建 Elasticsearch 的客户端,实现索引的创建、文档的增删改查以及复杂的查询操作。Spring Data 提供的注解使得操作 Elasticsearch 如同操作数据库一样简单,提高了开发效率。 **搜索引擎的...

    Elasticsearch java工具类

    Elasticsearch提供了Java REST客户端,允许开发者直接通过Java代码与ES集群进行交互。这个工具类可能包含了如索引文档、查询、更新和删除文档等基本操作的封装,以及聚合、脚本等高级功能。例如,`IndexRequest`用于...

    Elasticsearch 7基于springboot的应用

    **Elasticsearch 7 ...提供的 `elasticsearch.pdf` 文件可能包含了更深入的理论介绍和最佳实践,而 `maguo-es-jd` 和 `maguo-es-api` 文件可能包含具体的代码示例和 API 使用说明,对于初学者来说是很好的学习资源。

    SpringBoot整合Elasticsearch完整源码

    - 使用Spring Data Elasticsearch的注解,如`@Document`、`@Id`等,定义实体类,并实现对Elasticsearch的操作,如索引创建、数据存取、查询等。 - 编写Controller层的代码,将HTTP请求映射到Elasticsearch的CRUD...

    elasticSearch的操作demo

    最后,`es`包可能是Elasticsearch相关的操作接口或抽象类,它们定义了与Elasticsearch交互的方法,如添加、更新、删除文档,以及查询等。例如: ```java public interface ElasticsearchRepository { void save...

    Mybatis的Mapper方式整合elasticsearch的DSL调用,基于接口和代理生成bean注入的方式进行调用

    本篇文章将详细介绍如何将Mybatis的Mapper方式与Elasticsearch的DSL(Domain Specific Language)查询相结合,以及如何通过CGlib实现动态代理来优化这一过程。 首先,让我们理解什么是Mybatis的Mapper方式。Mybatis...

    elasticsearch结合spring springmvc jest 使用做成WEB架构

    Spring Data Elasticsearch提供了对Elasticsearch的操作接口,使得开发者可以使用面向对象的方式操作ES,无需关心底层的HTTP通信细节。 4. **Jest客户端** Jest是一个轻量级的Java REST客户端,用于与Elastic...

    SSM框架与ElasticSearch 无缝链接 并提供查询工具类

    2. **Java REST Client**:Elasticsearch官方提供的Java客户端,通过HTTP/JSON接口与ES集群通信,实现对索引、文档的操作。其线程安全特性意味着在多线程环境中可以放心使用,无需额外的同步措施。 将SSM与Elastic...

    elasticsearch-java-demo

    首先,定义一个实体类,例如`User`,并使用`@Document`注解标识它是Elasticsearch中的一个文档类型。然后,使用`index`或`save`方法将对象保存到索引中。 2. **查询(Search)**: Elasticsearch 提供了多种查询方式...

    Elasticsearch+spring

    4. **实体映射**:定义实体类,使用 `@Document` 注解标记为 Elasticsearch 的文档类型,并使用 `@Field` 注解来指定字段的属性。 5. **客户端配置**:创建 `RestHighLevelClient` 实例,这是 Elasticsearch 的 Java...

    springboot-elasticsearch-master.rar

    4. **客户端操作**:在实际业务中,我们可能需要自定义更复杂的查询或者管理操作,这时可以使用`RestHighLevelClient`,它是Elasticsearch官方提供的高级客户端,可以直接发送HTTP请求到ES服务器。 5. **批量操作**...

    elasticsearch-analysis-ik-8.1.3.zip

    通过SpringData-elasticsearch,开发者可以利用Spring的注解驱动和模板方法,轻松地在Java应用中实现Elasticsearch的操作,如索引管理、文档操作和查询构建。 **总结** Elasticsearch-analysis-ik插件是Elastic...

    springboot - 2.7.3版本 - (六)学习如何使用Elasticsearch-8.4.2

    至此,你已经学会了如何在SpringBoot 2.7.3项目中使用Elasticsearch 8.4.2的Java API客户端进行数据操作。你可以进一步探索如何实现复杂查询、聚合、映射配置、自定义脚本等功能,以充分利用Elasticsearch的强大功能...

    elasticsearch整合Spring用例

    为了启动Elasticsearch客户端并连接到集群,你需要在Spring Boot的配置文件(application.yml或application.properties)中配置相关参数: ```yaml spring: data: elasticsearch: cluster-name: your-cluster-...

    elastic-flux:带有Spring和Reactor的ElasticSearch客户端

    这个客户端可能展示了如何在 Spring Web-Flux 应用程序中使用 Reactor 进行异步操作,同时利用 Spring Data Elasticsearch 来与 Elasticsearch 交互。 项目中的 `elastic-flux-master` 文件可能是项目的源代码,...

Global site tag (gtag.js) - Google Analytics