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

郑州网站建设电话郑州seo优化外包顾问阿亮

郑州网站建设电话,郑州seo优化外包顾问阿亮,wordpress 文章投票插件,php网站开发ppt一、背景 es索引有一个文档CourseIndex,下面是示意: creatorIdgradesubjectnameno1002270英语听力课程一N00232DS91004380数学口算课程N00209DK71003480物理竞赛课程N00642XS21002280英语听力课程二N00432WS31002290英语听力课程三N002312DP5 在搜索的时候&#…

一、背景

es索引有一个文档CourseIndex,下面是示意:

creatorIdgradesubjectnameno
1002270英语听力课程一N00232DS9
1004380数学口算课程N00209DK7
1003480物理竞赛课程N00642XS2
1002280英语听力课程二N00432WS3
1002290英语听力课程三N002312DP5

在搜索的时候,搜索条件包括creatorId列表,grade列表,subject列表等,且它们不是固定的字典,而是从文档CourseIndex的已有数据中获取。

假使上面的数据,搜索条件分别是:

creatorId列表

  • 1002
  • 1003
  • 1004

grade列表

  • 2
  • 3
  • 4

subject列表

  • 70
  • 80
  • 90

总结一下需求,对es文档的数据进行桶bucket排序,以达到去重效果。

下面将介绍如何使用spring-data-elasticsearch 3.2.4实现对指定字段的聚合搜索。

pom.xml引入jar包

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId><version>3.2.4.RELEASE</version></dependency>

二、CourseIndexAggrService.java


import lombok.RequiredArgsConstructor;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.ParsedLongTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.List;/*** @author xxx*/
@Component
@RequiredArgsConstructor
public class CourseIndexAggrService {private final ElasticsearchRestTemplate elasticsearchRestTemplate;private final CommonConfig commonConfig;private static final String UNIQUE_FIELD = "unique_field";// 需要进行桶排序的字段public static final String CREATOR_ID = "creatorId";public static final String GRADE = "grade";public static final String SUBJECT = "subject";public List<String> findUniqueField(String uniqueField) {NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();//TODO 这里boolQueryBuilder是一个空的查询条件// 过滤掉已逻辑删除的记录 // boolQueryBuilder.filter(QueryBuilders.termQuery("deleted", 0));queryBuilder.withQuery(boolQueryBuilder);TermsAggregationBuilder termsAgg = AggregationBuilders.terms(UNIQUE_FIELD).field(uniqueField);queryBuilder.addAggregation(termsAgg);// idx_courseIndex是索引名queryBuilder.withIndices("idx_courseIndex");// CourseIndex是es文档类,见下文AggregatedPage<CourseIndex> resultPage = elasticsearchRestTemplate.queryForPage(queryBuilder.build(), CourseIndex.class);Aggregation aggregation = resultPage.getAggregation(UNIQUE_FIELD);ParsedLongTerms terms = (ParsedLongTerms) aggregation;// 获取桶final List<? extends Terms.Bucket> buckets = terms.getBuckets();// 提取唯一值List<String> uniqueUserIds = new ArrayList<>();for (Terms.Bucket bucket : buckets) {uniqueUserIds.add(bucket.getKeyAsString());}return uniqueUserIds;}
}

三、CourseIndex.java

这里略去了无关本文的字段。

import lombok.Data;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;import javax.persistence.Id;
import java.io.Serializable;
import java.util.Set;/*** 课程索引.* <p>* 索引检索条件,并非所有的字段* </p>** @author xxx*/
@Data
@Document(indexName = "#{commonConfig.courseIdx}", type = "_doc", shards = 1, refreshInterval = "-1")
public class CourseIndex implements Serializable {@Idprivate String id;/*** 课程或讲次编号*/@Field(type = FieldType.Keyword)private String no;/*** 创建者ID*/@Field(type = FieldType.Long)private long creatorId;/*** 课程或讲次名称*/@Field(type = FieldType.Text)private String name;/*** 科目*/@Field(type = FieldType.Integer)private int subject;/*** 年级*/@Field(type = FieldType.Integer)private int grade;
}

四、使用

// 查询创建者creatorId列表
final List<Long> userIds = courseIndexAggrService.findUniqueField(CREATOR_ID).stream().map(v -> Long.parseLong(v)).collect(Collectors.toList());// 查询年级grade列表
final List<Integer> grades = courseIndexAggrService.findUniqueField(GRADE).stream().map(v -> Integer.parseInt(v)).collect(Collectors.toList());// 查询科目subject列表
final List<Integer> subjects = courseIndexAggrService.findUniqueField(SUBJECT).stream().map(v -> Integer.parseInt(v)).collect(Collectors.toList());

在这里插入图片描述

http://www.tj-hxxt.cn/news/124891.html

相关文章:

  • 现在那个网站做推广效果会好点公司网站推广
  • 网站建设公司studstu口碑营销的概念是什么
  • wordpress网站添加背景音乐自己怎么注册网站
  • 全国哪个餐饮品牌的网站做的好网络营销策略案例
  • 能发布自做的视频网站正规排名网站推广公司
  • wordpress 不支持svgseosem是什么职位
  • excel表格做网站爱站之家
  • 企业网站备案要多少钱国际新闻快报
  • 网站建设需要掌握哪些知识电商运营工作内容
  • 郴州网站建设案例seo网站排名优化快速排
  • 制作企业网站的方法竞价广告代运营
  • 中英双语网站源码软文范例大全500
  • 建网站要注册吗torrent种子猫
  • 上海装修找哪家公司好百度seo工作室
  • 如何做楼盘网站怎么创建自己的网站平台
  • 霸州有做滤芯网站的吗刷赞网站推广永久
  • 国外有哪些网站是做弱电的品牌宣传推广方案
  • 蔬菜网站建设seo排名优化代理
  • 青岛网站设计软件seo网络推广公司排名
  • style wordpress 主题东莞百度seo推广公司
  • 网站备案截图投百度做广告效果怎么样
  • 专业做网站哪家正规网站建设服务商
  • 山西网站建设营销qq软文推广文章案例
  • 有什么手机做网站的石家庄谷歌seo
  • 新手做亚马逊要逛哪些网站牛奶软文广告营销
  • 网站免费正能量下载淘宝站内推广方式有哪些
  • 中国商标网商标查询官方网站徐州seo外包
  • 河北专业做网站中国优化网
  • 支付宝手机网站支付二维码怎么做seo站长助手
  • wordpress 链接新窗口sem优化托管公司