久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

ELASTICSEARCH如何實現JAVA的增刪改查

149次閱讀
沒有評論

共計 7241 個字符,預計需要花費 19 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 ELASTICSEARCH 如何實現 JAVA 的增刪改查,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

操作 ES 的對象:TransportClient

!--elasticsear 使用的 jar -- 
  dependency 
  groupId org.elasticsearch.client /groupId 
  artifactId transport /artifactId 
  version ${elasticsearch.client.version} /version 
  /dependency 
  !--elasticsear 使用的 jar --

我的版本是 5.4.0

創建  TransportClient 對象

我是使用 spring 的 bean 注入的

@SuppressWarnings(resource)
@Bean(name= transportClient)
@Lazy
public TransportClient getTransportClient(){
 TransportClient client =null;
 try{ Settings settings= Settings.builder().put(cluster.name ,  elasticsearch).build();
 client=new PreBuiltTransportClient(settings).addTransportAddress( new InetSocketTransportAddress(InetAddress.getByName( 192.168.0.11),9300));
 log.info( 創建 es 客戶端對象成功 
 }catch(Exception e){
 log.error( 創建 es 客戶端對象失敗 
 log.error(失敗原因: +e.getMessage());
 System.exit(-1);
 }
 return client;
}

    創建對象那個成功后,就可以用來操作 es 庫了,他的作用跟 spring-jdbctemplate,spring-jdbctemplate 一樣,提供了對數據庫增刪改查的功能,

spring 也提供了對 es 操作的對象叫 Spring Data Elasticsearch

參考文檔:

http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa

我用的就是 es 自己提供的對象  TransportClient

添加數據

    es 的添加數據提供了多種方法,跟 hql 語言有點相似,都是面向對象的。

es 支持批量操作的方法,為了提供效率都是用批量的對象

BulkRequestBuilder builder=transportClient.prepareBulk();

BulkRequestBuilder 對象有一個地方需要注意,因為是批量操作,es 忽略了數據的不正確性,就算你的數據不對,builder 也不會報錯,所以在調試階段需要先確保數據的準確性再用該對象進行操作。

插入數據,其實只需要把你的對象轉成 json,然后批量插入即可

@Override
public void batchAddMyZu(List Family  list) { BulkRequestBuilder builder=transportClient.prepareBulk();
 for(Family family:list){ String objstr= JSON.toJSONString(family);
 builder.add(client.prepareIndex( family , myfamily ,family.getPrimaryKey()).setSource(objstr, XContentType.JSON));
 }
 builder.execute().actionGet();
System.out.println(此次插入數據的個數是   +list.size());
}

    setSource 方法里面可以指定各種插入類型,我一般都是用 json 格式。

刪除操作

  es 可以通過指定 index,type,id 刪除數據,也支持搜索刪除 deleteByQuery

通過指定 id 刪除方法

@Override
public void batchUndercarriageFamilies(List String  publishIds) { BulkRequestBuilder builder=transportClient.prepareBulk();
 for(String publishId:publishIds){ builder.add(transportClient.prepareDelete(FAMILY, FAMILY_MARKETFAMILY, publishId).request());
 }
 builder.get();}

通過 deleteByQuery 刪除

@Override
public void delMyZu(String guid, String userId) { DeleteByQueryAction.INSTANCE.newRequestBuilder(transportClient)
 .source(FAMILY)
 .filter(QueryBuilders.boolQuery().must(QueryBuilders.termQuery( zuGUID , guid)).must(QueryBuilders.termQuery( userId , userId)).must(QueryBuilders.typeQuery(FAMILY_MYFAMILY)))
 .get();}

QueryBuilder 對象可以做任何查詢

修改操作

我現在修改是根據指定索引后然后修改指定字段醬樣的

@Override
public void updateMyZu_Related4MyZuValue(List Related4MyZuValue  list) { BulkRequestBuilder builder=transportClient.prepareBulk();
 for(Related4MyZuValue value:list){
 try { XContentBuilder source=XContentFactory.jsonBuilder().startObject()
 .field(related4ZuValue ,value.getRelated4ZuValue())
 .field(zuSalePrice ,value.getZuSalePrice())
 .endObject();
 builder.add(transportClient.prepareUpdate(FAMILY, FAMILY_MYFAMILY, value.getPrimaryKey()).setDoc(source));
 } catch (IOException e) {
 continue;
 }
 }
 builder.get();}

我這種操作是執行 id 后修改該數據的 related4ZuValue 的值和 zuSalePrice 的值

查詢操作

es 最主要功能就是查詢

QueryBuilder 就是設置查詢條件的對象,你可以通過他設置各種條件

隨便貼幾個,自己感受吧。。。。

BoolQueryBuilder boolQueryBuilder=QueryBuilders.boolQuery();
if(keyword!=null !keyword.equals()){ QueryBuilder nameBuilder=QueryBuilders.matchQuery( zuName , keyword).analyzer(ik_max_word).boost(10);
 QueryBuilder labelBuilder=QueryBuilders.matchQuery(zuLabelName , keyword).analyzer(ik_max_word).boost(10);
 QueryBuilder categoryBuilder=QueryBuilders.matchQuery(categoryName , keyword).analyzer(ik_max_word).boost(10);
 boolQueryBuilder.should(nameBuilder).should(labelBuilder).should(categoryBuilder);
}else{ boolQueryBuilder.must(QueryBuilders.matchAllQuery());
SearchResponse response=transportClient.prepareSearch(FAMILY).setTypes(FAMILY_MARKETFAMILY)
 .setQuery(boolQueryBuilder)
 .setFrom((page-1)*pageSize).setSize(pageSize)
 .setExplain(true)
 .get();
SearchHits hits=response.getHits();
BoolQueryBuilder builders=new BoolQueryBuilder();
// 加上條件
builders.must(QueryBuilders.termQuery( userId , userId));
if(relatedValue==RelatedValue.MyBuyerZu.value()){
 builders.must(QueryBuilders.nestedQuery( related4ZuValue ,
 QueryBuilders.boolQuery()
 .must(QueryBuilders.termQuery( related4ZuValue.nameValue , UserReltatedValueUtil.getUserRelatedValue(relatedValue)))
 //.must(QueryBuilders.rangeQuery( endTime).lte(LongformStringDate(System.currentTimeMillis())))
 ,ScoreMode.None));
}else{ builders.must(QueryBuilders.nestedQuery( related4ZuValue , QueryBuilders.termQuery( related4ZuValue.nameValue , UserReltatedValueUtil.getUserRelatedValue(relatedValue)), 
 ScoreMode.None));
SearchResponse response=transportClient.prepareSearch(FAMILY).setTypes(FAMILY_MYFAMILY)
 .setQuery(builders).setFrom((page-1)*pageSize)
 .setSize(pageSize)
 .get();
SearchHits hits=response.getHits();
@Override
public MarketFamily getMarketFamily(String guid) { MarketFamily marketFamily=new MarketFamily();
 SearchResponse response=transportClient.prepareSearch(FAMILY)
 .setTypes(FAMILY_MYFAMILY).setQuery(QueryBuilders.termQuery( zuGUID , guid))
 .setSize(1)
 .get();
 SearchHits hits=response.getHits();
 for(SearchHit hit:hits.getHits()){ marketFamily=JSON.parseObject(hit.getSourceAsString(),MarketFamily.class);
 }
 return marketFamily;
}

取查詢結果總和 count

@Override
public long countMyAllZu(String userId, int relatedValue) { BoolQueryBuilder builders=new BoolQueryBuilder();
 builders.must(QueryBuilders.termQuery( userId , userId));
 if(relatedValue==RelatedValue.MyBuyerZu.value()){
 builders.must(QueryBuilders.nestedQuery( related4ZuValue ,
 QueryBuilders.boolQuery()
 .must(QueryBuilders.termQuery( related4ZuValue.nameValue , UserReltatedValueUtil.getUserRelatedValue(relatedValue)))
 .must(QueryBuilders.rangeQuery( endTime).lte(LongformStringDate(System.currentTimeMillis())))
 ,ScoreMode.None));
 }else{ builders.must(QueryBuilders.nestedQuery( related4ZuValue , QueryBuilders.termQuery( related4ZuValue.nameValue , UserReltatedValueUtil.getUserRelatedValue(relatedValue)), 
 ScoreMode.None));
 }
 SearchResponse response=transportClient.prepareSearch(FAMILY).setTypes(FAMILY_MYFAMILY)
 .setQuery(builders)
 .setSize(1)
 .get();
 SearchHits hits=response.getHits();
 return hits.getTotalHits();}

聚合求和 sum

@Override
public long getPlatformZuOrdersTotalAmount(String keyword,String startTime,String endTime) { BoolQueryBuilder boolQueryBuilder=QueryBuilders.boolQuery();
 if(keyword==null||keyword.equals()){ QueryBuilder queryBuilder=QueryBuilders.matchAllQuery();
 boolQueryBuilder.must(queryBuilder);
 }else{ QueryBuilder zuNameBuilder=QueryBuilders.matchQuery( zuName , keyword);
 QueryBuilder buyerNameBuilder=QueryBuilders.matchQuery(buyerName , keyword);
 QueryBuilder sellerNameBuilder=QueryBuilders.matchQuery(sellerName , keyword);
 boolQueryBuilder.should(zuNameBuilder).should(buyerNameBuilder).should(sellerNameBuilder);
 
 }
 if(!startTime.equals()){ QueryBuilder addTimeBuilder=QueryBuilders.rangeQuery( addTime).from(startTime).to(endTime);
 boolQueryBuilder.must(addTimeBuilder);
 }
 SearchResponse response=transportClient.prepareSearch(FAMILY).setTypes(FAMILY_FAMILYORDER)
 .setQuery(boolQueryBuilder)
 .addAggregation(AggregationBuilders.sum( price).field(price))
 .get();
 Sum sum=response.getAggregations().get( price 
 return (long) sum.getValue();}

以上是“ELASTICSEARCH 如何實現 JAVA 的增刪改查”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計7241字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 寿光市| 宣城市| 紫金县| 揭西县| 临洮县| 湾仔区| 平顶山市| 商城县| 昌邑市| 浙江省| 临海市| 东乡族自治县| 绵阳市| 诏安县| 文昌市| 南汇区| 开平市| 民乐县| 龙州县| 武威市| 原平市| 宁海县| 亳州市| 桃江县| 刚察县| 宁远县| 昌平区| 五大连池市| 韶山市| 林芝县| 铁力市| 深州市| 乌拉特中旗| 嫩江县| 抚宁县| 乐都县| 吉安县| 景谷| 那坡县| 宁波市| 华蓥市|