天天看點

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

ElasticSearch用戶端注解使用介紹

繼續閱讀