[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标)
2021/5/13 18:33:28
本文主要是介绍[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一:文档对象如下
@Data @AllArgsConstructor @NoArgsConstructor @Document(indexName = "items", type = "item",shards = 5, replicas = 1) public class Item implements Serializable { @Id private Long id; /**标题*/ @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word") private String title; /**分类*/ @Field(type = FieldType.Keyword) private String category; /**品牌*/ @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word") private String brand; /**价格*/ @Field(type = FieldType.Double) private Double price; /**图片地址*/ @Field(index = false, type = FieldType.Keyword) private String images; }
二:非聚合复杂查询(这儿展示了非聚合复杂查询的常用流程)
public void listPage(){ //1.创建QueryBuilder(即设置查询条件)这儿创建的是组合查询(也叫多条件查询),后面会介绍更多的查询方法 /*组合查询BoolQueryBuilder * must(QueryBuilders) :AND * mustNot(QueryBuilders):NOT * should: :OR */ BoolQueryBuilder builder = QueryBuilders.boolQuery(); //builder下有must、should以及mustNot 相当于sql中的and、or以及not //设置模糊搜索,博客的简诉中有学习两个字 builder.must(QueryBuilders.fuzzyQuery("category", "一级")); //设置要查询博客的标题中含有关键字 // builder.must(new QueryStringQueryBuilder("title").field("阿迪达斯裤子")); //按照博客的评论数的排序是依次降低 FieldSortBuilder sort = SortBuilders.fieldSort("price").order(SortOrder.DESC); //设置分页(从第一页开始,一页显示10条) //注意开始是从0开始,有点类似sql中的方法limit 的查询 PageRequest page = new PageRequest(0, 10); //2.构建查询 NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder(); //将搜索条件设置到构建中 nativeSearchQueryBuilder.withQuery(builder); //将分页设置到构建中 nativeSearchQueryBuilder.withPageable(page); //将排序设置到构建中 nativeSearchQueryBuilder.withSort(sort); //生产NativeSearchQuery NativeSearchQuery query = nativeSearchQueryBuilder.build(); //3.执行方法1 Page<Item> itemPage = itemRespository.search(query); //执行方法2:注意,这儿执行的时候还有个方法那就是使用elasticsearchTemplate //执行方法2的时候需要加上注解 //@Autowired //private ElasticsearchTemplate elasticsearchTemplate; List<Item> blogList = elasticsearchTemplate.queryForList(query, Item.class); //4.获取总条数(用于前端分页) int total = (int) itemPage.getTotalElements(); //5.获取查询到的数据内容(返回给前端) List<Item> content = itemPage.getContent(); System.out.println(total); System.out.println(content); }
三:精确查询(必须完全匹配上)
单个匹配termQuery
//不分词查询 参数1: 字段名,参数2:字段查询值,因为不分词,所以汉字只能查询一个字,英语是一个单词. QueryBuilder queryBuilder=QueryBuilders.termQuery("fieldName", "fieldlValue"); //分词查询,采用默认的分词器 QueryBuilder queryBuilder2 = QueryBuilders.matchQuery("fieldName", "fieldlValue");
这篇关于[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享