bboss-elasticsearch--API

丁灿
2023-12-01

原文网址:bboss-elasticsearch--API_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍bboss-elasticsearch的API。

官网

Elasticsearch索引文档增删改查 - Elasticsearch Bboss

Elasticsearch开发指南 - Elasticsearch Bboss

注解

官网

ElasticSearch客户端注解介绍 - Elasticsearch Bboss

属性注解

注解说明重要属性/示例
@ESId

指定文档id值,作为文档唯一标识。

根据此值对应的索引文档存在与否来决定添加或者修改操作(存在则修改,不存在则添加)。

若不用此注解,添加文档时es自动设置文档id属性。

// 是否将注解属性作为普通文档属性来保存
boolean persistent() default true;

// 查询/检索文档时,是否将文档id设置给对应被注解的属性
boolean readSet() default true;

示例

//ip作为id,根据ip值对应的索引文档存在与否来决定添加或修改

@ESId(readSet = true,persistent = false)
private String ip;

@ESParentId指定为parentid

// 是否将注解属性作为普通文档属性来保存
boolean persistent() default true;

// 查询/检索文档时,是否将文档id设置给对应被注解的属性
boolean readSet() default true;

@ESVersion

指定为文档版本信息。

// 是否将注解属性作为普通文档属性来保存
boolean persistent() default true;
@ESVersionType

指定文档版本类型。

// 是否将注解属性作为普通文档属性来保存
boolean persistent() default true;
@ESRetryOnConflict文档修改操作版本冲突重试次数// 是否将注解属性作为普通文档属性来保存
boolean persistent() default true;
@ESRouting路由信息// 是否将注解属性作为普通文档属性来保存
boolean persistent() default true;
@ESDocAsUpsert文档不存在时是否添加文档// 是否将注解属性作为普通文档属性来保存
boolean persistent() default true;
@ESSource返回值是否包含文档source数据的控制变量// 是否将注解属性作为普通文档属性来保存
boolean persistent() default true;
@Column

指定索引文档和对象属性的映射关系、指定日期格式等。

指定日期格式时一般与@JsonFormat一起使用。例如:

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

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

escape:是否对参数值进行特殊字符转义处理。true 处理;false 不处理。

默认为空,这时若是map传递参数,默认转义;若是bean传值,若bean属性指定了@Column(escape="false")则按照注解中设置的escape属性值来控制是否转义,若没在column注解中指定escape,则默认转义。

示例

@Column(name="docInfo.author",dataformat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",timezone = "Etc/UTC",locale = "zh")

private String docInfoAuthor;

@JsonIgnore不作为es字段保存

@JsonIgnore

private Integer sqlEndElapsed;

@PrimaryKey

跟@EsId作用一样(推荐用@EsId)

@EsId比@PrimaryKey多两个属性:readSet,persistent

@EsIndex

bboss 5.6.8新增了一组添加和修改文档的api,这组api没有带indexName和indextype参数,对应的索引和索引type在po对象中通过@ESIndex注解来指定。

@ESIndex提供了两个属性name和type,使用方法:

@ESIndex(name="indexName") //es 7不需要指定type
@ESIndex(name="indexName",type="indexName")

// 索引名称由indexName和日期类型字段agentStarttime通过yyyy.MM.dd格式化后的值拼接而成,索引类型为indexName
@ESIndex(name="indexName-{agentStarttime,yyyy.MM.dd}",type="indexName")

// 索引名称由indexName和当前日期通过yyyy.MM.dd格式化后的值拼接而成,索引类型为type字段对应的值
@ESIndex(name="indexName-{dateformat=yyyy.MM.dd}",type="{type}")

// 索引名称由indexName和日期类型字段agentStarttime通过yyyy.MM.dd格式化后的值拼接而成,索引类型为type字段对应的值
@ESIndex(name="indexName-{field=agentStarttime,dateformat=yyyy.MM.dd}",type="{field=type}")

示例

@ESIndex(name="indexName",type="indexType")
public class MyEntiry  {
   //设定文档标识字段
   @ESId(readSet = true,persistent = false)
   private Long demoId;
   ...
} 

ClientInterface

可以通过两种方法获得ClientInterface。都是单实例多线程安全的。(实际上,BBossESStarter 里边就是调用的ElasticSearchHelper的静态方法。。。)

SpringBoot环境:注入BBossESStarter 后获取

@Autowired
private BBossESStarter bbossESStarter;

ClientInterface clientInterface = bbossESStarter.getRestClient();
//ClientInterface clientInterface = bbossESStarter.getConfigRestClient("esmapper/xxx.xml");

SpringBoot环境通过下边的方法获取也能用,但官方说要使用本处方法,但没有给出原因。经自己使用,SpringBoot环境下使用本方法的优点:

1.能输出向ES服务器发出的请求到控制台

非SpringBoot环境:ElasticSearchHelper静态方法

ClientInterface clientInterface = ElasticSearchHelper.getRestClientUtil();
//ClientInterface clientInterface = ElasticSearchHelper.getConfigRestClientUtil("esmapper/xxx.xml");

除了通过ESId和ESParentId这两个注解来指定文档id和parentid,ClientInterface接口中还提供了一组方法来提供docid和parentid两个参数来指定文档id和parentid。

ClientInterfaceNew

 类似资料: