当前位置: 首页 > news >正文

网站建设 dw 时间轴网站设计建设代理机构

网站建设 dw 时间轴,网站设计建设代理机构,关于电商网站的数据中心建设方案,上海商务网站建设前言 简介 在 Elasticsearch7.15版本之后#xff0c;Elasticsearch官方将它的高级客户端 RestHighLevelClient标记为弃用状态。同时推出了全新的 Java API客户端 Elasticsearch Java API Client#xff0c;该客户端也将在 Elasticsearch8.0及以后版本中成为官方推荐使用的客…前言 简介 在 Elasticsearch7.15版本之后Elasticsearch官方将它的高级客户端 RestHighLevelClient标记为弃用状态。同时推出了全新的 Java API客户端 Elasticsearch Java API Client该客户端也将在 Elasticsearch8.0及以后版本中成为官方推荐使用的客户端。 Elasticsearch Java API Client 支持除 Vector tile search API 和 Find structure API 之外的所有 Elasticsearch API。且支持所有API数据类型并且不再有原始JsonValue属性。它是针对Elasticsearch8.0及之后版本的客户端所以我们需要学习新的Elasticsearch Java API Client的使用方法。 为什么要抛弃High Level Rest 客户端too heavy相关依赖超过 30 MB且很多都是非必要相关的api 暴露了很多服务器内部接口 一致性差仍需要大量的维护工作。 客户端没有集成 json/object 类型映射仍需要自己借助字节缓存区实现。 Java API Client最明显的特征 支持lambda表达式操作ES支持Builder建造者模式操作ES链式代码具有较强可读性.应用程序类能够自动映射为Mapping.所有Elasticsearch API的强类型请求和响应。所有API的阻塞和异步版本将协议处理委托给http客户端如Java低级REST客户端该客户端负责处理所有传输级问题HTTP连接池、重试、节点发现等。 官方地址 https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/7.17/indexing.html 简单使用 1导包 这里记住你的elasticsearch-java必须对应你电脑上装的ES版本 dependencygroupIdco.elastic.clients/groupIdartifactIdelasticsearch-java/artifactIdversion7.17.6/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.3/version/dependencydependencygroupIdjakarta.json/groupIdartifactIdjakarta.json-api/artifactIdversion2.0.1/version/dependency 2:开启链接 //创建一个低级的客户端final RestClient restClient RestClient.builder(new HttpHost(localhost, 9200)).build();//创建JSON对象映射器final RestClientTransport transport new RestClientTransport(restClient, new JacksonJsonpMapper());//创建API客户端final ElasticsearchClient client new ElasticsearchClient(transport); 3:关闭链接 client.shutdown();transport.close();restClient.close(); 4完整代码 public class Client {public static void main(String[] args) throws IOException {//创建一个低级的客户端final RestClient restClient RestClient.builder(new HttpHost(localhost, 9200)).build();//创建JSON对象映射器final RestClientTransport transport new RestClientTransport(restClient, new JacksonJsonpMapper());//创建API客户端final ElasticsearchClient client new ElasticsearchClient(transport);//查询所有索引-------------------------------------------------------------------------------------final GetIndexResponse response client.indices().get(query - query.index(_all));final IndexState products response.result().get(products);System.out.println(products.toString());//关闭client.shutdown();transport.close();restClient.close();} } JsonData类 原始JSON值。可以使用JsonpMapper将其转换为JSON节点树或任意对象。 此类型在API类型中用于没有静态定义类型或无法表示为封闭数据结构的泛型参数的值。 API客户端返回的此类实例保留对客户端的JsonpMapper的引用并且可以使用toclass转换为任意类型而不需要显式映射器 我们一般在ES的DSL范围查询中会使用到! 核心方法: to:将此对象转换为目标类。必须在创建时提供映射器from:从读取器创建原始JSON值of:从现有对象创建原始JSON值以及用于进一步转换的映射器deserialize:使用反序列化程序转换此对象。必须在创建时提供映射器 高阶使用 1ES配置类 // 配置的前缀 ConfigurationProperties(prefix elasticsearch) Configuration public class ESClientConfig {/*** 多个IP逗号隔开*/Setterprivate String hosts;/*** 同步方式* * return*/Beanpublic ElasticsearchClient elasticsearchClient() {HttpHost[] httpHosts toHttpHost();// Create the RestClient //RestClient restClient RestClient.builder(httpHosts).build();RestClient restClient RestClient.builder(httpHosts).setHttpClientConfigCallback(httpClientBuilder-httpClientBuilder.setDefaultHeaders(listOf(new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()))).addInterceptorLast((HttpResponseInterceptor) (response, context)- response.addHeader(X-Elastic-Product, Elasticsearch))).build();// Create the transport with a Jackson mapperRestClientTransport transport new RestClientTransport(restClient, new JacksonJsonpMapper());// create the API clientreturn new ElasticsearchClient(transport);}/*** 异步方式* * return*/Beanpublic ElasticsearchAsyncClient elasticsearchAsyncClient() {HttpHost[] httpHosts toHttpHost();RestClient restClient RestClient.builder(httpHosts).build();RestClientTransport transport new RestClientTransport(restClient, new JacksonJsonpMapper());return new ElasticsearchAsyncClient(transport);}/*** 解析配置的字符串hosts转为HttpHost对象数组** return*/private HttpHost[] toHttpHost() {if (!StringUtils.hasLength(hosts)) {throw new RuntimeException(invalid elasticsearch configuration. elasticsearch.hosts不能为空);}// 多个IP逗号隔开String[] hostArray hosts.split(,);HttpHost[] httpHosts new HttpHost[hostArray.length];HttpHost httpHost;for (int i 0; i hostArray.length; i) {String[] strings hostArray[i].split(:);httpHost new HttpHost(strings[0], Integer.parseInt(strings[1]), http);httpHosts[i] httpHost;}return httpHosts;}}2查询所有索引 //省略连接...final GetIndexResponse all client.indices().get(query - query.index(_all));System.out.println(all.toString()); //省略关闭... 3查询某个索引 //查询某个索引final GetIndexResponse products client.indices().get(query - query.index(products));System.err.println(products.toString()); 4:创建索引 //查询某个索引是否存在boolean exists client.indices().exists(query - query.index(products)).value();System.out.println(exists);if (exists) {System.err.println(索引已存在);} else {final CreateIndexResponse products client.indices().create(builder - builder.index(products));System.err.println(products.acknowledged());} 5:删除指定索引 //删除指定索引boolean exists client.indices().exists(query - query.index(products)).value();System.out.println(exists);if (exists) {DeleteIndexResponse response client.indices().delete(query - query.index(products));System.err.println(response.acknowledged());} else {System.err.println(索引不存在);} 6:查询索引的映射 //查询映射信息final GetIndexResponse response client.indices().get(builder - builder.index(produces));System.err.println(response.result().get(produces).mappings()); 7:创建索引指定映射 numberOfReplicas(“1”):设置副本 numberOfShards(“1”):设置分片 //创建索引指定映射,分片和副本信息final CreateIndexResponse response client.indices().create(builder -builder.settings(indexSetting - indexSetting.numberOfReplicas(1).numberOfShards(1)).mappings(map - map.properties(name, propertyBuilder - propertyBuilder.keyword(keywordProperty - keywordProperty)).properties(price, propertyBuilder - propertyBuilder.double_(doubleNumProperty - doubleNumProperty)).properties(des, propertyBuilder - propertyBuilder.text(textProperty - textProperty.analyzer(ik_smart).searchAnalyzer(ik_smart)))).index(produces)); 8:创建文档 使用HashMap作为数据存储容器 //创建文档//1.创建HashMap进行存储数据文档要对应映射final HashMapString, Object doc new HashMap();doc.put(name,辣条);doc.put(age,12);doc.put(id,11111);//2.将文档存入索引中final IndexResponse response client.index(builder - builder.index(produces).id(doc.get(id)).document(doc));System.err.println(response.version()); 使用自定义类作为数据存储容器 实体类 Data AllArgsConstructor NoArgsConstructor ToString public class Produce {private String id;private String name;private double age; }//创建文档final Produce produce new Produce(123, 小明, 18);final IndexResponse response client.index(builder - builder.index(produces).id(produce.getId()).document(produce));System.err.println(response.version());使用外部JSON数据创建 这里要注意我们需要使用StringReader进行读取时使用replace函数将设置的’改为,当然这在真实的业务中肯定不会有,因为真实业务中一定是标准的JSON数据,无需使用replace进行替换了 //创建文档final StringReader input new StringReader({name:农夫三拳,price:3.00,des:农夫三拳有点甜}.replace(\, ));final IndexResponse response client.index(builder - builder.index(produces).id(44514).withJson(input));System.err.println(response.version()); 9: 查询所有文档 final SearchResponseObject response client.search(builder - builder.index(produces), Object.class);final ListHitObject hits response.hits().hits();hits.forEach(x- System.err.println(x));10:根据ID查询文档 使用HashMap对应查询 //查询文档final GetResponseMap response client.get(builder - builder.index(produces).id(116677), Map.class);final Map source response.source();source.forEach((x,y)-{System.err.println(x:y);}); 使用自定义类对应查询 final GetResponseProduce response1 client.get(builder - builder.index(produces).id(aabbcc123), Produce.class);final Produce source1 response1.source();System.err.println(source1.toString()); 11:删除文档 final GetResponseProduce response1 client.get(builder - builder.index(produces).id(aabbcc123), Produce.class);final Produce source1 response1.source();System.err.println(source1.toString()); 12:修改文档 全覆盖 //修改文档覆盖final Produce produce new Produce(ccaabb123, 旺仔摇滚洞, 旺仔摇滚洞乱摇乱滚, 10.23D);final UpdateResponseProduce response client.update(builder - builder.index(produces).id(aabbcc123).doc(produce), Produce.class);System.err.println(response.shards().successful()); 修改部分文档 区别在于我们需要设置.docAsUpsert(true)表明是修改部分而不是覆盖 //修改文档(部分修改) // final Produce produce new Produce(ccaabb123, 旺仔摇滚洞, 旺仔摇滚洞乱摇乱滚, 10.23D);final Produce produce new Produce();produce.setName(旺仔摇不动);final UpdateResponseProduce response client.update(builder - builder.index(produces).id(aabbcc123).doc(produce).docAsUpsert(true), Produce.class);System.err.println(response.shards().successful()); 13:批量操作 批量新增 produceList.add(produce1);produceList.add(produce2);produceList.add(produce3);//构建BulkRequestfinal BulkRequest.Builder br new BulkRequest.Builder();for (Produce produce : produceList) {br.operations(op-op.index(idx-idx.index(produces).id(produce.getSku()).document(produce)));}final BulkResponse response client.bulk(br.build());批量删除 ListBulkOperation bulkOperations new ArrayList();// 向集合中添加需要删除的文档id信息for (int i 0; i dto.getIds().size(); i) {int finalI i;bulkOperations.add(BulkOperation.of(b - b.delete((d - d.index(dto.getIndex()).id(dto.getIds().get(finalI))))));}// 调用客户端的bulk方法并获取批量操作响应结果BulkResponse response client.bulk(e - e.index(dto.getIndex()).operations(bulkOperations)); DSL查询 1matchAll查询所有文档 //matchAllfinal SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.matchAll(v-v)), Produce.class);System.err.println(response.hits().hits()); 2:match 根据字段查询 //简单query方式查询final SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.match(t -t.field(name).query(龙虎万精油))), Produce.class);System.err.println(response.hits().hits()); 3:多id查询 //多ID查询final SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.ids(sid-sid.values(1000,1001))), Produce.class);System.err.println(response.hits().hits()); 4:term 不分词查询 //term不分词条件查询final SearchResponseProduce response client.search(builder - builder.index(produces).query(q - q.term(t - t.field(name).value(风油精))), Produce.class);System.err.println(response.hits().hits()); 5:范围查询 //范围查询final SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.range(r -r.field(price).gt(JsonData.of(5D)).lt(JsonData.of(15D)))),Produce.class);System.err.println(response.hits().hits()); 6: 前缀查询 final SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.prefix(p-p.field(name).value(六))),Produce.class);System.err.println(response.hits().hits()); 7:匹配查询 //匹配查询 final SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.wildcard(w-w.field(name).value(风*))),Produce.class);System.err.println(response.hits().hits());?单字符匹配 //匹配查询final SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.wildcard(w-w.field(name).value(风?精))),Produce.class);System.err.println(response.hits().hits()); 8:模糊查询 //模糊查询final SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.fuzzy(f-f.field(name).value(六仙花露水))),Produce.class);System.err.println(response.hits().hits()); 9:多条件查询 使用bool关键字配合must,should,must_not must:所有条件必须同时成立must_not:所有条件必须同时不成立should:所有条件中成立一个即可 //多条件final SearchResponseProduce response client.search(builder -builder.index(produces).query(q -q.bool(b -b.must(t -t.term(v -v.field(name).value(旺仔摇不动))).must(t2 -t2.term(v2 -v2.field(price).value(0.0D))))),Produce.class);System.err.println(response.hits().hits()); 或者创建BoolQuery.Builder以便进行业务判断是否增加查询条件 ListFieldValue fieldValues new ArrayList();fieldValues.add(FieldValue.of(10));fieldValues.add(FieldValue.of(100));BoolQuery.Builder boolQuery new BoolQuery.Builder();boolQuery.must(t-t.terms(v-v.field(label).terms(term-term.value(fieldValues))));boolQuery.must(t-t.match(f-f.field(name).query(旺仔)));SearchResponseObject search elasticsearchClient.search(builder - builder.index(my_test_index).query(q-q.bool(boolQuery.build())),Object.class);10多字段查询-multiMatch //多字段查询final SearchResponseProduce response client.search(builder -builder.index(produces).query(q-q.multiMatch(qs-qs.query(蚊虫叮咬 辣眼睛).fields(name,des))),Produce.class);System.err.println(response.hits().hits()); 11:高亮显示 我们注意要设置前缀和后缀 //高亮显示final SearchResponseProduce response client.search(builder -builder.index(produces).query(q - q.match(v - v.field(name).query(风油精))).highlight(h - h.preTags(span).postTags(span).fields(name, hf - hf)),Produce.class);System.err.println(response.toString()); 12:分页查询 我们使用match_all进行全部搜索的时候使用size关键字设置每一页的大小,使用from关键字设置页码 from的计算公式:(页码-1)*size //分页查询final SearchResponseProduce response client.search(builder -builder.index(produces).query(q-q.matchAll(v-v)).size(2).from(0),Produce.class);System.err.println(response.hits().hits()); 13:排序 使用sort关键字指定需要进行排序的字段设置排序类型即可,我们这里会使用到SortOrder枚举类来进行指定排序方式 desc:降序 asc:升序 //排序final SearchResponseProduce response client.search(builder -builder.index(produces).query(q-q.matchAll(v-v)).sort(builder1 - builder1.field(f-f.field(price).order(SortOrder.Asc))),Produce.class);System.err.println(response.hits().hits()); 14:指定字段查询 使用_source关键字在数组中设置需要展示的字段 值得注意的是在source方法中需要我们写filter去指定是include包含或是exclude去除xx字段 //指定字段查询final SearchResponseProduce response client.search(builder -builder.index(produces).query(q-q.matchAll(v-v)).source(s-s.filter(v-v.includes(price,des))),Produce.class);System.err.println(response.hits().hits()); 15:聚合查询-求最大值 SearchResponseObject search elasticsearchClient.search(builder -builder.index(my_test_index).from(0).size(1).aggregations(aa, t -t.max(f-f.field(type))), Object.class);EsResult esResult EsUtils.searchAnalysis(search);Aggregate aa esResult.getAggregations().get(aa);LongTermsAggregate lterms aa.lterms();BucketsLongTermsBucket buckets lterms.buckets();ListLongTermsBucket array buckets.array();16:桶聚合查询-劣势 group by SearchResponseJSONObject search elasticsearchClient.search(builder -builder.index(EsIndexConstants.article_info).query(t-t.range(f-f.field(create_time).gte(JsonData.of(startDate)).lte(JsonData.of(endDate)))).from(0).size(1).aggregations(countValue, t -t.terms(f - f.field(ata_type.keyword))), JSONObject.class); Aggregate countValue search .getAggregations().get(countValue); ListStringTermsBucket array countValue.sterms().buckets().array();
http://www.hkea.cn/news/14343593/

相关文章:

  • 合肥专业网站建设公司哪家好seo零基础教学
  • 海东市网站建设不让网站在手机怎么做
  • 网站开发设计的论文上海网站推广专员需求
  • 一站式软文发布推广平台百度sem优化师
  • 开发网站报价方案提高工作效率的句子
  • 建设网站答题赚钱电子商务 网站建设
  • 沧州做网站的深圳做网站要多少
  • 做网站前应该怎么处理扬州天达建设集团有限公司网站
  • 龙华网站建设公司视频网站开发意义
  • 嘉兴建站公司常州网站关键词优化软件
  • 网站建设丽水园林网站建设设计方案
  • 竟标网站源码青岛网站推广公司排名
  • 网游网站开发自助建站平台搭建
  • 西安做网站比较好的公司上海网页设计公司费用
  • 租车公司网站 模板承德网站建设方案
  • 网站制作开发教程全国工程信息网
  • 一般做外单的有哪些网站学校怎么做网站
  • 温州高端企业网站建设wordpress表格样式插件
  • 建设工程设计备案网站如何添加百度指数
  • 保定企业网站建设1688阿里巴巴官网
  • 做细分行业信息网站西安建网站哪家好
  • 有经验的邵阳网站建设自己建网站数据怎么做
  • 临海市住房与城乡建设规划局 网站wordpress企业网站插件
  • 家具网站 模板电子商务网站建设目的
  • 设计接单网站大全wordpress前台投稿上传图片大小
  • 建设互联网教育网站建设网站需要数据库备份
  • 中山网站的建设网页设计与制作section什么意思
  • 合肥建设网站制作哪个好看那种片哪个网站好用
  • 路桥区商用营销型网站建设做消费信贷网站
  • 浦东区网站建设周口集团网站建设