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

装饰网站建设流程网络营销论文5000字

装饰网站建设流程,网络营销论文5000字,wordpress图片缓冲,java三大主流框架通过之前两篇文章 了解了ES的核心概念和基础使用学习进阶的DSL语法处理复杂的查询 这段时间通过在本企业代码中对ES框架的使用,总结了不少经验。主要分为三点 企业封装了ES原生的api,需要使用企业项目提供的接口实现 -------简单使用(本章节目…

通过之前两篇文章

  • 了解了ES的核心概念和基础使用
  • 学习进阶的DSL语法处理复杂的查询

这段时间通过在本企业代码中对ES框架的使用,总结了不少经验。主要分为三点

  • 企业封装了ES原生的api,需要使用企业项目提供的接口实现 -------简单使用(本章节目的)
  • 项目会遇到更复杂的查询需求,需要进一步深入对ES的学习 -------复杂使用
  • 了解项目如何封装原生的api,学习设计思想 --------深入学习

目录

  • 1. Term查询
    • 1.1 原生api实现term查询
    • 1.2 企业api实现term查询
  • 2. 复合查询__must
    • 2.1 原生api实现must查询
    • 2.2 企业api实现must查询
  • 3. 复合查询__should
  • 4. 复合查询__mustnot
  • 5. 分页和排序
    • 5.1 原生api实现分页和排序
    • 5.2 企业api实现分页和排序
  • 6 聚合查询
    • 6.1 原生api实现桶聚合
    • 6.2 企业api实现桶聚合

------------------------------本章节核心目的是梳理出 本企业项目提供的api原生ES提供的api 的使用区别--------------------------------





本企业将ES的api大致封装成了两个核心类
EsOperater类

方法说明
String[] indexes()
Integer from()分页
Integer size()分页
List sort()排序
QueryBuilder queryBuilder()普通查询/复合查询
EsOperaterBuiler esOperaterBuiler()继承类
SearchResponse execute()执行查询
CountResponse queryTotal()
SearchResponse executeScroll()
QueryBuilder buildQueryBuilder()
QueryBuilder buildQueryBuilderByQueryType(EsQueryInfoBean queryInfo)根据查询信息bean构造相应的查询器
List buildAggBuilder()根据aggMap创建聚合器,包括单层聚合和多层聚合
AggregationBuilder makeChildAgg(EsAggInfoBean esAggInfo, EsAggInfoBean parentAggInfo)递归创建聚合器
EsOperater build()

EsOperaterBuiler类(重点关注)

方法说明
EsOperaterBuiler indexes(String… indexes)设置索引集合
EsOperaterBuiler from(Integer from)设置分页参数的查询数量
EsOperaterBuiler size(Integer size)设置分页参数的查询数量
EsOperaterBuiler sort(String sort)设置排序字段
EsOperaterBuiler sortOrder(SortOrder sortOrder)设置排序排序方式(升序、降序)
EsOperaterBuiler queryBuilder(QueryBuilder queryBuilder)设置查询构建器(QueryBuilder),如果操作构建器(EsOperater)中buildQueryBuilder()方法构造不出需要的查询构建起,
Boolean isAliasExists(String indexName)查询别名是否存在

1. Term查询

1.1 原生api实现term查询

@Test
void TermQuery(){// 获取client这里默认已经获取// 1. 准备request (参数为索引名称)SearchRequest request = new SearchRequest("indexName");// 2. 构建DSL// 2.1 获取建造者SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 2.2 建造者调用DSLsearchSourceBuilder.termQuery("name","zjh");// 2.3 组装request.source(searchSourceBuilder);// 3. 发送请求SearchResponse reponse = client.search(request, RequestOptions.ESFAULT);// 4. 解析数据,得到_source数据SearchHit[] hits = response.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

此时就可以获取到source的数据了。上述写法也可以简化,如下

// 此方式常用
@Test
void TermQuery(){// 获取client这里默认已经获取// 1. 准备request (参数为索引名称)SearchRequest request = new SearchRequest("indexName");// 2. 构建DSL语句request.source().query(QueryBuilders.termQuery("name","zjh"));// 3. 发送请求SearchResponse reponse = client.search(request, RequestOptions.ESFAULT);// 4. 解析数据,得到_source数据SearchHit[] hits = response.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

1.2 企业api实现term查询

@Test
void TermQuery(){// 构建索引名称String indexName = ElasticSearchConst.UNSTRUCTURE_FILE_SCAN_RESULT + taskId;// 1. 设置索引集合EsOperater.EsOperaterBuiler builder = EsOperater.esOperaterBuiler().indexes(indexName);// 2. 设置查询构建器 + 准备DSL语句builder.queryBuilder(QueryBuilders.termQuery("name","zjh"));// 3. 发送请求SearchResponse response = builder.build().execute();//  4. 解析数据,得到_source数据SearchHit[] hits = response.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

解释:

步骤一:需要将 索引名 存到 esOperaterBuiler类 的全局变量中,以便其他方法调用

步骤二:需要将 DSL语句 存到 esOperaterBuiler类 的全局变量中,以便其他方法调用

步骤三:需要从esOperaterBuiler类 切换到 esOperater类,再执行最核心的 execute() 方法,这个方法会进行一些列操作,将最终的结果返回给 response

2. 复合查询__must

2.1 原生api实现must查询

@Test
void MustQuery(){// 获取client这里默认已经获取// 1. 准备request (参数为索引名称)SearchRequest request = new SearchRequest("indexName");// 2. 构建DSL语句// 2.1 创建bool查询BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();// 2.2 添加must条件boolQuery.must(QueryBuilders.termQuery("name", "zjh"));// 2.3 构建请求内容request.source().query(boolQuery);// 3. 发送请求SearchResponse reponse = client.search(request, RequestOptions.ESFAULT);// 4. 解析数据,得到_source数据SearchHit[] hits = response.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

2.2 企业api实现must查询

@Test
void TermQuery(){// 构建索引名称String indexName = ElasticSearchConst.UNSTRUCTURE_FILE_SCAN_RESULT + taskId;// 1. 设置索引集合EsOperater.EsOperaterBuiler builder = EsOperater.esOperaterBuiler().indexes(indexName);// 2. 设置查询构建器 + 准备DSL语句// 2.1 创建bool查询BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();// 2.2 添加must条件boolQuery.must(QueryBuilders.termQuery("name", "zjh"));// 此行代码的作用就是将构造的must条件,存放到EsOperater类的全局变量builder.queryBuilder(boolQuery);// 3. 发送请求SearchResponse response = builder.build().execute();//  4. 解析数据,得到_source数据SearchHit[] hits = response.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}
解释一下步骤二:可能会疑惑为什么不这样写BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();BoolQueryBuilder mustQuery = boolQuery.must(QueryBuilders.termQuery("name", "zjh"));builder.queryBuilder(mustQuery);因为must(参数)底层会将参数传给boolQuery.must()的boolQuery对象,是递增的逻辑

解释:

步骤一:需要将 索引名 存到 esOperaterBuiler类 的全局变量中,以便其他方法调用

步骤二:需要将 DSL语句(布尔查询) 存到 esOperaterBuiler类 的全局变量中,以便其他方法调用

步骤三:需要从esOperaterBuiler类 切换到 esOperater类,再执行最核心的 execute() 方法,这个方法会进行一些列操作,将最终的结果返回给 response

可以进一步简化

@Test
void TermQuery(){// 构建索引名称String indexName = ElasticSearchConst.UNSTRUCTURE_FILE_SCAN_RESULT + taskId;// DSL语句BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();boolQuery.must(QueryBuilders.termQuery("name", "zjh"));// 使用企业api实现查询EsOperater.EsOperaterBuiler builder = EsOperater.esOperaterBuiler();SearchResponse response = builder.index(indexName).queryBuilder(boolQuery).build().execute();//  4. 解析数据,得到_source数据SearchHit[] hits = response.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

3. 复合查询__should

同理

4. 复合查询__mustnot

同理

5. 分页和排序

5.1 原生api实现分页和排序

// 此方式常用
@Test
void TermQuery(){// 获取client这里默认已经获取// 1. 准备request (参数为索引名称)SearchRequest request = new SearchRequest("indexName");//2.查询__构建DSL语句request.source().query(QueryBuilders.termQuery("name","zjh"));//  分页request.source().from.size(5);//  时间排序request.source().sort(“logTime”,SortOrder.ASC);// 3. 发送请求SearchResponse reponse = client.search(request, RequestOptions.ESFAULT);// 4. 解析数据,得到_source数据SearchHit[] hits = response.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

5.2 企业api实现分页和排序

@Test
void TermQuery(){// 构建索引名称String indexName = ElasticSearchConst.UNSTRUCTURE_FILE_SCAN_RESULT + taskId;// 1. 设置索引集合EsOperater.EsOperaterBuiler builder = EsOperater.esOperaterBuiler().indexes(indexName);// 2. 查询builder.queryBuilder(QueryBuilders.termQuery("name","zjh"));//  分页builder.queryBuilder(QueryBuilders.termQuery("name","zjh")).size(5);//  排序builder.queryBuilder(QueryBuilders.termQuery("name","zjh")).sort("logTime").sortOrder(SortOrder.DESC);// 3. 发送请求SearchResponse response = builder.build().execute();//  4. 解析数据,得到_source数据SearchHit[] hits = response.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

6 聚合查询

6.1 原生api实现桶聚合

// 需求:实现对城市、品牌的聚合。即用户输入城市、品牌,得到搜索结果
@Test
void TermQuery(){// 获取client这里默认已经获取// 1. 准备request (参数为索引名称)SearchRequest request = new SearchRequest("indexName");//2.查询// CityName:自定义桶名; city:根据城市聚合AggregationBuilder aggregationBuilder1 = AggregationBuilders.terms("CityName").field("city");AggregationBuilder aggregationBuilder2 = AggregationBuilders.terms("BrandName").field("brand");request.source().aggregation(aggregationBuilder1);request.source().aggregation(aggregationBuilder2);// 3. 发送请求SearchResponse reponse = client.search(request, RequestOptions.ESFAULT);// 4. 解析数据Aggreagtions aggreagtions = response.getAggreagtions();List<? extends Terms.Bucket> buckets1 =  aggreagtions.get("CityName").getBuckets();for (Terms.Bucket bucket : buckets) {//打印结果是:西安 或者 上海System.out.println(bucket.getKeyAsString());}List<? extends Terms.Bucket> buckets2 =  aggreagtions.get("BrandName").getBuckets();for (Terms.Bucket bucket : buckets) {//打印结果是:星巴克 或者 瑞幸System.out.println(bucket.getKeyAsString());}}

6.2 企业api实现桶聚合

// 需求:实现对城市、品牌的聚合。即用户输入城市、品牌,得到搜索结果
@Test
void TermQuery(){// 获取client这里默认已经获取// 1. 准备request (参数为索引名称)SearchRequest request = new SearchRequest("indexName");//2.查询List<AggregationBuilder> aggregationBuilderList = new ArrayList<>();aggregationBuilderList.add(AggregationBuilders.terms("CityName").field("city"));;aggregationBuilderList.add(AggregationBuilders.terms("BrandName").field("brand"));// aggBuilderList()企业封装的工具,将聚合参数赋值到全局变量上builder.aggBuilderList(aggregationBuilderList);// 3. 发送请求SearchResponse response = builder.size(1).build().execute();// 4. 解析数据Aggreagtions aggreagtions = response.getAggreagtions();// 注意ParsedStringTerms,还有ParsedLongTerms、ParsedDoubleTerms...ParsedStringTerms CityName =  aggreagtions.get("CityName");for (Terms.Bucket bucket : CityName.getBuckets()) {//打印结果是:西安 或者 上海System.out.println(bucket.getKeyAsString());}ParsedStringTerms BrandName =  aggreagtions.get("BrandName");for (Terms.Bucket bucket : BrandName.getBuckets()) {//打印结果是:星巴克 或者 瑞幸System.out.println(bucket.getKeyAsString());}}

这里需要解释一下步骤四中的 ParsedStringTerms

ES会将聚合结果封装到特定的类中,方便你来处理不同类型的聚合结果。

ParsedLongTerms:

  • 这个类用于处理长整型(long)类型的聚合结果。

ParsedStringTerms:

  • 这个类用于处理字符串(String)类型的聚合结果。

什么意思呢?在ES中对"CityName"进行聚合。

返回结果中可以看到如下信息,表示星巴克有三家(西安)

  • key:“星巴克” (字符串类型)

  • doc_count : 3 (long类型)

因此根据key的类型,正确选择使用ParsedStringTerms || ParsedLongTerms ||…接收聚合结果,否则报错。

示例图:
在这里插入图片描述


文章转载自:
http://carryout.wqfj.cn
http://abetter.wqfj.cn
http://scholasticism.wqfj.cn
http://conflate.wqfj.cn
http://anatole.wqfj.cn
http://sage.wqfj.cn
http://cropland.wqfj.cn
http://temerarious.wqfj.cn
http://dissemble.wqfj.cn
http://housewares.wqfj.cn
http://coptic.wqfj.cn
http://unminished.wqfj.cn
http://retrodisplacement.wqfj.cn
http://daftly.wqfj.cn
http://freemason.wqfj.cn
http://crabhole.wqfj.cn
http://din.wqfj.cn
http://unsanitary.wqfj.cn
http://incaution.wqfj.cn
http://veterinary.wqfj.cn
http://vagina.wqfj.cn
http://aplanatic.wqfj.cn
http://deflect.wqfj.cn
http://jeanswear.wqfj.cn
http://boohoo.wqfj.cn
http://bearwood.wqfj.cn
http://homeopathic.wqfj.cn
http://theorbo.wqfj.cn
http://uncondescending.wqfj.cn
http://pandybat.wqfj.cn
http://speedlamp.wqfj.cn
http://zeugma.wqfj.cn
http://antevert.wqfj.cn
http://holomorphic.wqfj.cn
http://dasyure.wqfj.cn
http://messianism.wqfj.cn
http://lugger.wqfj.cn
http://haj.wqfj.cn
http://galax.wqfj.cn
http://jowled.wqfj.cn
http://millimetre.wqfj.cn
http://radiant.wqfj.cn
http://guess.wqfj.cn
http://civilize.wqfj.cn
http://mbd.wqfj.cn
http://sign.wqfj.cn
http://synthetical.wqfj.cn
http://irides.wqfj.cn
http://deiktic.wqfj.cn
http://aspidistra.wqfj.cn
http://karen.wqfj.cn
http://slumdweller.wqfj.cn
http://pilar.wqfj.cn
http://instrumentarium.wqfj.cn
http://painfully.wqfj.cn
http://growth.wqfj.cn
http://solarium.wqfj.cn
http://coppermine.wqfj.cn
http://pair.wqfj.cn
http://consumption.wqfj.cn
http://aminotransferase.wqfj.cn
http://demyelination.wqfj.cn
http://flyleaf.wqfj.cn
http://tattle.wqfj.cn
http://petrographical.wqfj.cn
http://remigial.wqfj.cn
http://schoolchild.wqfj.cn
http://grandparent.wqfj.cn
http://geoelectricity.wqfj.cn
http://intermundane.wqfj.cn
http://rutland.wqfj.cn
http://nascar.wqfj.cn
http://southabout.wqfj.cn
http://fasciation.wqfj.cn
http://aggeus.wqfj.cn
http://vibratile.wqfj.cn
http://entomologist.wqfj.cn
http://abaci.wqfj.cn
http://isopod.wqfj.cn
http://orville.wqfj.cn
http://intumescent.wqfj.cn
http://overt.wqfj.cn
http://compulsion.wqfj.cn
http://exhibitive.wqfj.cn
http://heteroduplex.wqfj.cn
http://enjoinder.wqfj.cn
http://holyday.wqfj.cn
http://archean.wqfj.cn
http://norge.wqfj.cn
http://cone.wqfj.cn
http://bev.wqfj.cn
http://equilibrator.wqfj.cn
http://spectrophotoelectric.wqfj.cn
http://narcist.wqfj.cn
http://indeterminable.wqfj.cn
http://harmonometer.wqfj.cn
http://casquet.wqfj.cn
http://myringa.wqfj.cn
http://dichloromethane.wqfj.cn
http://inculcation.wqfj.cn
http://www.hrbkazy.com/news/80456.html

相关文章:

  • java web开发网站开发百度百家
  • 中国建设银行密码重置网站上海关键词seo
  • 潍坊网站建设定制seo顾问服务 品达优化
  • 整形医院网站模板百度seo效果怎么样
  • 电商基础入门教程什么叫优化关键词
  • 佛山专业做淘宝网站推广百度网站推广排名
  • 网站功能设计有哪些要求关键词优化
  • 外贸网络营销的主动营销有哪些seo高端培训
  • 网站开发视频教程百度网盘高端企业网站定制公司
  • 建设外贸商城网站国内营销推广渠道
  • 区域销售网站什么做网络推广外包公司干什么的
  • 涉县移动网站建设公司在线咨询 1 网站宣传
  • 企业网站建设哪家便宜b站推广入口
  • 长沙 做营销型网站的公司产品推广软件有哪些
  • 外贸网站推广如何做网络营销推广合作
  • 英国做电商网站seo学徒招聘
  • 西安网站制作排名南昌seo网站排名
  • 怎么做网上直营店网站网站优化关键词
  • dw做网站背景音乐网站开发流程
  • p2p网站建设框架沧浪seo网站优化软件
  • 现在网站主怎么做淘宝客爱站
  • 新疆住房和城乡建设局网站torrentkitty磁力天堂
  • 免费的ps软件合肥seo排名优化
  • 网站开发服务合同范本可口可乐营销策划方案
  • php做网站难么百度一下首页网页百度
  • 上海网站建设找哪家指数基金定投怎么买
  • asp制作动态网站开发重庆网站建设
  • 网站如何做跳板如何制作一个简单的网页
  • 游仙建设局官方网站哈尔滨优化推广公司
  • 欧美网站模板下载品牌seo培训咨询