elasticsearch java 基于TransportClient API的增删改查
来源:互联网 发布:连江尚德中学网络硬盘 编辑:程序博客网 时间:2024/05/10 23:42
返回客户端类(基于TransportClient)
@Configuration("meta") public class ConfigBeans { @Value("${es_name}") private String es_name; @Value("#{'${es_ip}'.split(',')}") private List<String> es_ip; @Value("${es_port}") private Integer es_port; private TransportClient client = null; @Bean @Lazy public TransportClient esClient(){ if(client==null){ if(es_name != null && !"".equals(es_name)){ Settings settings = Settings.builder().put("cluster.name", es_name).build(); client = new PreBuiltTransportClient(settings); }else{ client = new PreBuiltTransportClient(Settings.EMPTY); } try { for (String ip : es_ip) { client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ip), es_port)); } } catch (UnknownHostException e) { e.printStackTrace(); } return client; }else{ return client; } } }增删改查类
public class UserServcieImpl implements UserService{
private static Logger log = LogManager.getLogger(UserServcieImpl.class);private String esIndexName = "test";@Value("#{'${es_indexs}'.split(',')}")private String[] indexs;@Value("#{'${es_types}'.split(',')}")private String[] types;//private String[] indexs = {"test","accounts"};//private String[] types = {"person","info","info2"};@Resourceprivate UserMapper userMapper;@AutowiredConfigBeans configBeans;@Autowiredprivate IMyDataDriver myDataElasticSearchDriver;/** * 查询 * @param keyword * @return */@Overridepublic List<Map<String, Object>> searchMany(String keyword) { SearchResponse searchResponse = configBeans.esClient().prepareSearch(indexs).setTypes(types)//设置index,type (多个传字符串数组) //.setQuery(QueryBuilders.matchAllQuery()) //查询所有默认返回10条 //.setQuery(QueryBuilders.matchQuery("last_name", keyword))//进行分词匹配单个字段,匹配字段名为filedname,值为value,加and完全匹配分词,根据匹配程度排序(_score) //.setQuery(QueryBuilders.matchPhraseQuery("about", keyword))//完全匹配单个字段,匹配字段名为filedname,值为value //.setQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("last_name", keyword)).filter(QueryBuilders.rangeQuery("age").gt(30)))//逻辑条件 must--and,should--or,must_not //.setQuery(QueryBuilders.multiMatchQuery(keyword, "content","title"))//多字段匹配 //.setQuery(QueryBuilders.queryStringQuery("name:to* AND age:[0 TO 19]")) //根据条件查询,支持通配符大于等于0小于等于19 //.setQuery(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("lastModifyTime") .from("2017-8-23 00:00:01").to("2018-7-21 00:00:03"))) //分词 根据条件查询,支持通配符大于等于0小于等于19(全文搜索) //.setQuery(QueryBuilders.termQuery("title", keyword))//查询时不分词 疑问 一个字能查出来,两个字以上查不出来 //.setQuery(QueryBuilders.termsQuery("title", keyword,"技"))//其中一个命中即匹配 //.setQuery(QueryBuilders.rangeQuery("province").gt(10).lt(20))//对于某一个field,大于多少,小于多少 //.setQuery(QueryBuilders.regexpQuery(field, regexp))//正则表达式查询 //.setQuery(QueryBuilders.existsQuery("sort"))// 存在field的不为null的数据 //.setQuery(QueryBuilders.nestedQuery("publication_history", QueryBuilders.matchQuery("publication_history.publication_date","20130102"), ScoreMode.Total))//嵌套查询 //.setScroll(new TimeValue(60000))//滚动 //.highlighter(new HighlightBuilder().field("about").preTags("<span style='color:red'>").postTags("</span>")) //高亮 //TermsAggregationBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team"); //TermsAggregationBuilder posAgg= AggregationBuilders.terms("pos_count").field("position"); //.addAggregation(AggregationBuilders.nested("negsted_path","comments").subAggregation(AggregationBuilders.sum("mysum").field("comments.stars"))) /*.addAggregation(AggregationBuilders.nested("negsted_path","comments").subAggregation(AggregationBuilders.histogram("age_group").field("comments.age").interval(10.0)).subAggregation(AggregationBuilders .reverseNested("blogposts").subAggregation(AggregationBuilders.terms("tags").field("tags")) ))*/ //.addAggregation(AggregationBuilders.filter("count",QueryBuilders.queryStringQuery("contactsName:刘承梅"))) //MoreLikeThisRequestBuilder mlt = new MoreLikeThisRequestBuilder(client, "indexName", "indexType", "id"); mlt.setField("title");//匹配的字段 SearchResponse response = client.moreLikeThis(mlt.request()).actionGet(); /* 聚合查询 获取聚合查询结果时 get 返回的时对应桶 (1)统计某个字段的数量 ValueCountBuilder vcb= AggregationBuilders.count("count_uid").field("uid"); get返回ValueCount (2)去重统计某个字段的数量(有少量误差查找性别的 M、F,共两个) CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid"); (3)聚合过滤 FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001")); (4)按某个字段分组(记录有多少F,多少M) TermsBuilder tb= AggregationBuilders.terms("group_name").field("name"); get返回Terms (5)求和 SumBuilder sumBuilder= AggregationBuilders.sum("sum_price").field("price"); get返回Sum (6)求平均 AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price"); get返回Avg (7)求最大值 MaxBuilder mb= AggregationBuilders.max("max_price").field("price"); (8)求最小值 MinBuilder min= AggregationBuilders.min("min_price").field("price"); (9) 扩展统计包括最大最小方差等 ExtendedStatsAggregationBuilder field = AggregationBuilders.extendedStats("price").field("price");//返回ExtendedStats (10)按日期间隔分组 DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date"); (11)获取聚合里面的结果 TopHitsBuilder thb= AggregationBuilders.topHits("top_result"); (12)嵌套的聚合 NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests"); (13)反转嵌套 AggregationBuilders.reverseNested("res_negsted").path("kps "); */ .setSearchType(SearchType.QUERY_THEN_FETCH)//设置查询类型 .setExplain(true)// 设置是否按查询匹配度排序 .setFrom(0).setSize(10)//分页 //.addSort("age", SortOrder.DESC)//指定字段排序 .execute().actionGet();//execute() 方法中,创建了一个ActionListener,用来监听action的执行结果;然后在调用actionGet(timeout),获取最终返回结果,actionGet是一个阻塞的方法,可以设置一个超时时间,也可以不设置 //.get(); List<Map<String,Object>> results = new ArrayList<Map<String,Object>>(); SearchHit[] hits = searchResponse.getHits().getHits(); System.out.println("size "+hits.length); for(SearchHit s : hits) { results.add(s.getSource()); /*System.out.println(s.getHighlightFields()); Map<String, HighlightField> highlightFields = s.getHighlightFields(); HighlightField highlightField = highlightFields.get("about"); System.out.println("高亮字段:"+highlightField.getName()+"\n 高亮部分内容:"+highlightField.getFragments()[0].string());*/ } /*Nested nested = searchResponse.getAggregations().get("negsted_path"); System.out.println(nested.getDocCount()); Histogram sum = nested.getAggregations().get("age_group"); List<Histogram.Bucket> buckets = (List<Histogram.Bucket>) sum.getBuckets(); for(Histogram.Bucket bucket :buckets){ String id = bucket.getKeyAsString(); Long count = bucket.getDocCount(); System.out.println("id "+id+" count"+count); } ReverseNested reverseNested =nested.getAggregations().get("blogposts"); System.out.println(reverseNested); Terms by_key = reverseNested.getAggregations().get("tags"); List<Terms.Bucket> buckets2 = (List<Terms.Bucket>) by_key.getBuckets(); for(Terms.Bucket bucket :buckets2){ String id = bucket.getKeyAsString(); Long count = bucket.getDocCount(); System.out.println("id "+id+" count"+count); }*/ /*Terms by_key = searchResponse.getAggregations().get("sales"); System.out.println(by_key); //System.out.println("sum+="+sum+" max"+ by_key.getMax()); List<Terms.Bucket> buckets = (List<Terms.Bucket>) by_key.getBuckets(); for(Terms.Bucket bucket :buckets){ String id = bucket.getKeyAsString(); Long count = bucket.getDocCount(); } */ //System.out.println("name--"+aggregation.getName()+"type "+aggregation.getType()+" metadata "+aggregation.getMetaData()); /*String a = searchResponse.getScrollId(); int count=0; while(true) { SearchResponse response2 = configBeans.esClient().prepareSearchScroll(a) .setScroll(new TimeValue(60000)).execute().actionGet(); SearchHit[] hits2 = response2.getHits().getHits(); System.out.println(hits2.length); if(hits2.length==0) break; for (SearchHit s : hits2) { System.out.println("count:" + count+" "+s.getSourceAsString()+"index:"+s.getIndex()+"type:"+s.getType()); } count++; a=response2.getScrollId(); System.out.println(a); }*/ return results;}@Overridepublic Boolean add() { List<Map<String, Object>> infoMap = userMapper.listAllChen(); TransportClient transportClient = configBeans.esClient(); BulkRequestBuilder bulkRequest=transportClient.prepareBulk();//批量 try { IndexRequestBuilder indexRequestBuilder = configBeans.esClient().prepareIndex("test", "require"); int i=0; for (Map<String, Object> map : infoMap) { //indexRequestBuilder.setSource(map).execute().actionGet(); bulkRequest.add(transportClient.prepareIndex("hut_paper","paper").setSource(map)); //indexRequestBuilder.setSource(obj).execute().actionGet(); if (i%500==0) { bulkRequest.execute().actionGet(); System.out.println("执行。。"); } } bulkRequest.execute().actionGet(); } catch (Exception e) { e.printStackTrace(); return false; } return true;}@Overridepublic Boolean addMapping(String index,String type) { //先创建空索引库 configBeans.esClient().admin().indices().prepareCreate(index).execute().actionGet(); try { XContentBuilder mapping = XContentFactory.jsonBuilder() .startObject() .startObject(index) .startObject("properties") .startObject("title").field("type", "string").field("store", "yes").endObject() .startObject("description").field("type", "string").field("index", "not_analyzed").endObject() .startObject("price").field("type", "double").endObject() .startObject("onSale").field("type", "boolean").endObject() .startObject("type").field("type", "integer").endObject() .startObject("createDate").field("type", "date").endObject() .endObject() .endObject() .endObject(); PutMappingRequest mappingRequest = Requests.putMappingRequest(index).type(type).source(mapping); configBeans.esClient().admin().indices().putMapping(mappingRequest).actionGet(); }catch (IOException e){ return false; } return true;}@Overridepublic Boolean deleteDocument(String id) { try{ DeleteResponse response = configBeans.esClient().prepareDelete("chenjiale", "chenjiale", id) .get(); String index = response.getIndex(); String type = response.getType(); String id2 = response.getId(); long version = response.getVersion(); System.out.println("index:"+index+" type: "+type+" id:"+id2+" version:"+version+" status:"+response.status()); return true; }catch (Exception e){ return false; }}@Overridepublic Boolean updateDocument(String id) { try{ XContentBuilder xContentBuilder = XContentFactory.jsonBuilder() .startObject(); JSONObject obj = new JSONObject(); for(String key:obj.keySet()){ xContentBuilder.field(key, obj.getJSONObject(key)); //便利map,多行更新 } xContentBuilder.endObject(); UpdateResponse response = configBeans.esClient().update(new UpdateRequest("chenjiale", "chenjiale", id) .doc(xContentBuilder)).get(); return true; }catch (Exception e){ e.printStackTrace(); return false; }}
}
阅读全文
0 0
- elasticsearch java 基于TransportClient API的增删改查
- ElasticSearch入门-增删改查(java api)
- elasticsearch java 基于 RestClientAPI 的增删改查
- ElasticSearch的增删改查API介绍
- ElasticSearch Java 增删改查
- ElasticSearch Java API(二)增删改查
- JAVA API调用elasticsearch实现基本增删改查
- ElasticSearch的增删改查
- Elasticsearch 单模式下API的增删改查操作
- Hbase基于java API的增删改查(旧API)
- Elasticsearch增删改查
- ElasticSearch 增删改查
- elasticsearch增删改查
- elasticsearch java 增删改查 版本1
- elasticsearch java 增删改查 版本2
- Java之Elasticsearch 增删改查
- ElasticSearch restful api 的客户端PostMan实现对ES的增删改查
- 基于mongodb的java之增删改查(CRUD)
- qt单元测试用法,qt5单元测试例子,qt5单元测试demo,测试你的函数
- C
- 翻转字符串
- 2017机器人与自动化领域SCI期刊最新影响因子
- 关于数组越界问题简析
- elasticsearch java 基于TransportClient API的增删改查
- C
- 【mac笔记】jenkins+svn+Xcode7.2+pod构建成功
- 因子和
- Python可以被用来做哪些神奇好玩的事情
- angular4学习指南(二)路由
- robotframework-ride编辑器\SSHLibrary简单测试
- 设计模式--单例模式
- 指针数组与数组指针对比及简单测试