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

网页加入信任站点西安网优项目公司

网页加入信任站点,西安网优项目公司,做网站维护有危险吗,建设政务网站ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Query DSLhttps://blog.csdn.net/zhenghuishengq/article/details/134159587【四】ElasticSearch的聚合查询操作https://blog.csdn.net/zhenghuishengq/article/details/134159587【五】SpringBoot整合elasticSearchhttps://blog.csdn.net/zhenghuishengq/article/details/134212200 SpringBoot整合elasticSearch 一SpringBoot整合ElasticSearch1需要的依赖以及版本2创建config配置类并测试连接3增删改查测试3.1索引插入数据3.2根据id查询数据3.3删除一条数据 4普通查询4.1match条件查询4.2term精确匹配4.3prefix前缀查询4.4通配符查询wildcard4.5范围查询4.6fuzzy模糊查询4.7highlight高亮查询 5聚合查询5.1aggs聚合查询5.2获取最终结果 一SpringBoot整合ElasticSearch 前面几篇讲解了es的安装dsl语法聚合查询等接下来这篇主要就是讲解通过java的方式来操作es这里选择通过springboot的方式整合ElasticSearchSearch 在学习这个整合之前可以查看对应的官网资料https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/7.17/connecting.html 1需要的依赖以及版本 首先创建springboot项目然后需要的依赖如下我前面用的是7.7.0的版本因此这里继续使用这个版本。其他的依赖根据个人需要选择 propertiesjava.version8/java.versionelasticsearch.version7.7.0/elasticsearch.version /properties dependenciesdependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.7.0/version/dependency /dependencies2创建config配置类并测试连接 随后创建一个config的配置类用于连接上ElasticSearch我这边是单机版并没有集群 /*** 连接es的工具类*/ Configuration public class ElasticSearchConfig { public static final RequestOptions COMMON_OPTIONS;static {RequestOptions.Builder builder RequestOptions.DEFAULT.toBuilder();COMMON_OPTIONS builder.build();}Beanpublic RestHighLevelClient esRestClient(){RestHighLevelClient client new RestHighLevelClient(RestClient.builder(new HttpHost(xx.xx.xx.xx, 9200, http)));return client;} }在创建好了之后可以直接在test类中进行测试看能否连接成功 RunWith(SpringRunner.class) SpringBootTest public class StudyApplicationTests {Resourceprivate RestHighLevelClient client;Testpublic void contextLoads() {System.out.println(restHighLevelClient);} }在运行之后如果打印出了以下这句话表示整合成功 org.elasticsearch.client.RestHighLevelClient7d151a3增删改查测试 3.1索引插入数据 首先先创建一个users的索引并向里面插入一条数据。插入和更新都可以用这个方法 //创建一个user索引并且插入一条数据 Test public void addData() throws IOException {//创建一个索引IndexRequest userIndex new IndexRequest(users);User user new User();user.setId(1);user.setUsername(Tom);user.setPassword(123456);user.setAge(18);user.setSex(女);//添加数据userIndex.source(JSON.toJSONString(user), XContentType.JSON);IndexResponse response client.index(userIndex, ElasticSearchConfig.COMMON_OPTIONS);//响应数据System.out.println(response); }随后再在kibana中查询这个索引可以看到这条数据是已经插入成功的并且索引页创建成功 3.2根据id查询数据 查询id为1的数据需要通过QueryBuild构造器查询 Test public void getById() throws IOException {SearchRequest request new SearchRequest(users);SearchSourceBuilder builder new SearchSourceBuilder();builder.query(QueryBuilders.matchQuery(id, 1));request.source(builder);SearchResponse response client.search(request, RequestOptions.DEFAULT);System.out.println(response); }3.3删除一条数据 删除刚刚创建的这条数据这里直接设置id为1即可 Test public void deleteById() throws Exception{DeleteRequest request new DeleteRequest(users);request.id(1);DeleteResponse delete client.delete(request, ElasticSearchConfig.COMMON_OPTIONS);System.out.println(delete); }4普通查询 这里主要是结合本人写的第三篇Query DSL的语法通过java的方式写出依旧是先创建一个员工的信息索引并且设置字段得我属性 PUT /employees {mappings: {properties: {name:{type: keyword},job:{type: keyword},salary:{type: integer}}} }随后批量的插入10条数据 PUT /employees/_bulk { index : { _id : 1 } } { name : huisheng1,job:python,salary:35000 } { index : { _id : 2 } } { name : huisheng2,job:java,salary: 50000} { index : { _id : 3 } } { name : huisheng3,job:python,salary:18000 } { index : { _id : 4 } } { name : huisheng4,job:java,salary: 22000} { index : { _id : 5 } } { name : huisheng5,job:javascript,salary:18000 } { index : { _id : 6 } } { name : huisheng6,job:javascript,salary: 25000} { index : { _id : 7 } } { name : huisheng7,job:c,salary:20000 } { index : { _id : 8 } } { name : huisheng8,job:c,salary: 20000} { index : { _id : 9 } } { name : huisheng9,job:java,salary:22000 } { index : { _id : 10 } } { name : huisheng10,job:java,salary: 9000}4.1match条件查询 首先是分页查询分页查询的queryDSL的语法如下 GET /employees/_search {query: {match: {job: java}} }java的语法如下 SearchRequest request new SearchRequest(employees); SearchSourceBuilder builder new SearchSourceBuilder(); builder.query(QueryBuilders.matchQuery(job, java)); request.source(builder); SearchResponse response client.search(request, RequestOptions.DEFAULT); System.out.println(response);短语匹配的语法如下 builder.query(QueryBuilders.matchPhraseQuery(job,java));多字段查询的语法如下 String fields[] {job,name}; builder.query(QueryBuilders.multiMatchQuery(java,fields));queryString的语法如下 builder.query(QueryBuilders.queryStringQuery(java));4.2term精确匹配 GET /employees/_search {query: {term: {job: java}} }精确匹配通过java的方式如下 builder.query(QueryBuilders.termQuery(job,java));4.3prefix前缀查询 PUT /employees/_search {query:{prefix:{name:{value:huisheng1}}} }前缀查询的java方式如下 builder.query(QueryBuilders.prefixQuery(name,huisheng1));4.4通配符查询wildcard GET /employees/_search {query: {wildcard: {job: {value: *py*}}} }通配符查询的java方式如下 builder.query(QueryBuilders.wildcardQuery(job,py));4.5范围查询 POST /employees/_search {query: {range: {salary: {gte: 25000}}} }范围查询的java方式如下 builder.query(QueryBuilders.rangeQuery(salary).gte(25000));4.6fuzzy模糊查询 GET /employees/_search {query: {fuzzy: {job: {value: javb,fuzziness: 1 //表示允许错一个字}}} }模糊查询的java方式如下 builder.query(QueryBuilders.fuzzyQuery(job,javb).fuzziness(Fuzziness.ONE));4.7highlight高亮查询 GET /employees/_search {query: {term: {job: {value: java}}},highlight: {fields: {*:{}}} }高亮查询的java方式如下 builder.query(QueryBuilders.termQuery(job,java)); HighlightBuilder highlightBuilder new HighlightBuilder(); highlightBuilder.field(job); builder.highlighter(highlightBuilder);5聚合查询 5.1aggs聚合查询 先通过job进行分组查询再拿到结果后再进行stats查询求最大值最小值平均值等 POST /employees/_search {size: 0,aggs: {name: {terms: {field: job},aggs: {stats_salary: {stats: {field: salary}}}}} }其java代码如下需要注意的点就是如果存在二级聚合那么需要调用这个 subAggregation 方法如果只需要聚合的结果而不需要查询的结果可以直接在SearchSourceBuilder的实例设置为0即可。 Test public void toAgg() throws Exception{//创建检索请求SearchRequest searchRequest new SearchRequest();//指定索引searchRequest.indices(employees);//构建检索条件SearchSourceBuilder builder new SearchSourceBuilder();//构建聚合条件TermsAggregationBuilder aggregationBuilder AggregationBuilders.terms(jobData).field(job);aggregationBuilder.subAggregation(AggregationBuilders.stats(salaryData).field(salary));//将聚合条件加入到检索条件中builder.aggregation(aggregationBuilder);//只要聚合的结果不需要查询的结果builder.size(0);searchRequest.source(builder);//执行检索SearchResponse searchResponse client.search(searchRequest, RequestOptions.DEFAULT);System.out.println(检索结果 searchResponse); }打印的结果如下和预期要打印的结果是一致的 {took:4,timed_out:false,_shards:{total:1,successful:1,skipped:0,failed:0},hits:{total:{value:10,relation:eq},max_score:null,hits:[]},aggregations:{sterms#jobData:{doc_count_error_upper_bound:0,sum_other_doc_count:0,buckets:[{key:java,doc_count:4,stats#salaryData:{count:4,min:9000.0,max:50000.0,avg:25750.0,sum:103000.0}},{key:c,doc_count:2,stats#salaryData:{count:2,min:20000.0,max:20000.0,avg:20000.0,sum:40000.0}},{key:javascript,doc_count:2,stats#salaryData:{count:2,min:18000.0,max:25000.0,avg:21500.0,sum:43000.0}},{key:python,doc_count:2,stats#salaryData:{count:2,min:18000.0,max:35000.0,avg:26500.0,sum:53000.0}}]}}}除了上面的state求全部的最大值最小值等还可以分别的求最大值最小值平均值个数等求平均值的的示例如下需要使用到这个 AvgAggregationBuilder 构造器 AvgAggregationBuilder avgAggregationBuilder AggregationBuilders.avg(salaryData).field(salary); //将聚合条件加入到检索条件中 builder.aggregation(avgAggregationBuilder);求最大值的示例如下需要使用到这个 MaxAggregationBuilder 构造器 MaxAggregationBuilder maxAggregationBuilder AggregationBuilders.max(maxData).field(salary); //将聚合条件加入到检索条件中builder.aggregation(maxAggregationBuilder);求最小值的示例如下需要使用到这个 MinAggregationBuilder 构造器 MinAggregationBuilder minAggregationBuilder AggregationBuilders.min(minData).field(salary); //将聚合条件加入到检索条件中 builder.aggregation(minAggregationBuilder);求总个数的示例如下需要使用到这个 ValueCountAggregationBuilder 构造器 ValueCountAggregationBuilder countBuilder AggregationBuilders.count(countData).field(salary); //将聚合条件加入到检索条件中 builder.aggregation(countBuilder);5.2获取最终结果 上面在查询之后会获取 SearchResponse 的对象这里面就值执行查询后返回的结果 SearchResponse searchResponse随后可以直接过滤结果通过for循环去遍历这个 getHits SearchHits hits searchResponse.getHits(); SearchHit[] searchHits hits.getHits(); for (SearchHit searchHit : searchHits) {String sourceAsString searchHit.getSourceAsString();Employees employees JSON.parseObject(sourceAsString, Employees.class);System.out.println(employees);}或者直接获取聚合操作结果的值 //获取jobData聚合。还有Avg、Max、Min等 Terms maxData aggregations.get(jobData); for (Terms.Bucket bucket : maxData.getBuckets()) {String keyAsString bucket.getKeyAsString();System.out.println(job职业 keyAsString 数量 bucket.getDocCount()); }
http://www.zqtcl.cn/news/346594/

相关文章:

  • 贵州做团队培训的网站法学网站阵地建设
  • 网站死链是什么西宁高端网站开发公司
  • 做团购网站的公司wordpress附件存放位置
  • 成都最专业做网站的仿win8网站模板
  • 国外设计类网站男女做暖暖试看网站
  • 网站设计哪个好珠海微网站进入
  • 云主机开网站教程模板网会员
  • 网站建设无锡虚拟网站官网
  • 品牌网站设计联系东莞网站优化公
  • 自己做整个网站的流程php装修网站源码
  • 天津网站建设班模拟网站建设软件有哪些
  • 服务类的网站怎么做做软件的网站担保网站
  • 最新电子产品网站模板海口网站排名提升
  • 北京社保网站减员怎么做phpcms v9 实现网站搜索
  • 视频运营管理网站济南网站建设 济南货梯
  • html电影网站模板下载工具阿里云网站建设 部署与发布笔记
  • 建设跨境网站微信seo是什么意思
  • 我做彩票网站开发彩票网站搭建织梦如何仿手机网站源码下载
  • 东仓建设网站手机便宜的网站建设
  • 吕梁市住房与城乡建设厅网站wordpress 乐趣公园
  • 沈阳正规制作网站公司吗德成建设集团有限公司网站
  • 做网站标准步骤大学两学一做专题网站
  • 如何在手机上做网站Windows怎么建设网站
  • 专门做稀有产品的网站海口网站制作设计
  • 怎么查看自己的网站是否被百度收录网站的设计制作流程
  • 视觉设计网站芜湖做网站找哪家好
  • flash网站源码带asp后台电子商务有限公司网站
  • 一个网站有多少网页简单的logo设计
  • 重庆专业网站营销长春建站免费模板
  • 企业建设网站多少钱爱的网站歌曲