elasticsearch 条件去重_Elasticsearch学习之查询去重
1. 实现查询去重、分页,例如:实现依据qid去重,createTime排序,命令行为:
GET /nb_luban_answer/_search
{"query": {"match": {"status": 1}
},"sort": [
{"createTime": {"order": "desc"}
}
],"aggs": {"qid": {"terms": {"field": "qid","size": 10},"aggs": {"rated": {"top_hits": {"sort": [{"createTime": {"order": "desc"}
}],"size": 1}
}
}
}
},"size": 0,"from": 0}
JAVA API
String indexName="nb_luban_answer";
String typeName="luban_answer";
AggregationBuilder aggregation=AggregationBuilders
.terms("agg").field("qid")
.subAggregation(
AggregationBuilders.topHits("top").addSort("createTime",SortOrder.DESC).setSize(1)
);
SearchResponse sResponse=Tool.CLIENT.prepareSearch(indexName).setTypes(typeName)
.setQuery(QueryBuilders.matchQuery("status",1))
.addSort("createTime", SortOrder.DESC)
.addAggregation(aggregation)
.execute().actionGet();
Terms agg= sResponse.getAggregations().get("agg");for(Terms.Bucket entry : agg.getBuckets()) {
String key=String.valueOf(entry.getKey()) ;long docCount =entry.getDocCount();
System.out.println("key:"+ key +"doc_count:"+docCount);
TopHits topHits= entry.getAggregations().get("top");for(SearchHit hit : topHits.getHits()){
System.out.println("-> id:"+ hit.getId()+"createTime:"+hit.getSource().get("createTime"));
}
}
2. 取得某个索引中某个字段中的所有出现过的值
这种操作类似于使用SQL的SELECT UNIQUE语句。当需要获取某个字段上的所有可用值时,可以使用terms聚合查询完成:eg: select distinct street_name from table_name ;
GET /index_streets/_search?search_type=count
{"aggs": {"street_values": {"terms": {"field": "name.raw","size": 0}
}
}
}
因为目标是得到name字段上的所有出现过的值,因此search_type被设置为了count,这样在返回的响应中不会出现冗长的hits部分。另外,查询的目标字段的索引类型需要设置为not_analyzed。所以上面的field指定的是name.raw。
3. 取得某个索引/类型下某个字段中出现的不同值的个数
这种操作类似于使用SQL的select count( * ) from (select distinct * from table)语句。当需要获取某个字段上的出现的不同值的个数时,可以使用cardinality聚合查询完成:
GET /index_streets/_search?search_type=count
{"aggs": {"uniq_streets": {"cardinality": {"field": "name.raw"}
}
}
}
因为目标是得到name字段上的所有出现过的值,因此search_type被设置为了count,这样在返回的响应中不会出现冗长的hits部分。另外,查询的目标字段如果是字符串类型的,那么其索引类型需要设置为not_analyzed。所以上面的field指定的是name.raw。
转自:https://blog.csdn.net/a422100210/article/details/60959450
elasticsearch 条件去重_Elasticsearch学习之查询去重相关推荐
- 查询去重_如何在 1 秒内做到大数据精准去重?
去重计数在企业日常分析中应用广泛,如用户留存.销售统计.广告营销等.海量数据下的去重计数十分消耗资源,动辄几分钟,甚至几小时,Apache Kylin 如何做到秒级的低延迟精确去重呢? 作者:史少锋, ...
- MySQL学习记录04where条件子句、联表查询、子查询
文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...
- MySQL学习(8)︱DISTINCT去重与表连接
DISTINCT去重 distinct用于在查询中返回列的唯一不同值(去重复),支持单列或多列.在实际的应用中,表中的某一列含有重复值是常见的,如employee表的dept列.如果在查询数据时,希望 ...
- 【MapReduce】数据去重、多表查询、倒排索引、单元测试等案例编程
数据去重.多表查询.倒排索引.单元测试等案例编程 1 数据去重 2 多表查询 2.1 笛卡尔积 2.2 等值连接 2.3 自连接 3 倒排索引 4 单元测试 手动反爬虫,禁止转载: 原博地址 http ...
- Elasticsearch学习(四) - 查询①
title: Elasticsearch学习(四)-查询① date: 2020-10-29 tags: Elasticsearch Elasticsearch学习(四)-查询① categories ...
- 数据库一对多做链接去重_数据库的查询命令
条件 from / where / group by / having distinct / order by / limit 使用这些条件可以按照需求任意选择,但是顺序必须按照上面的顺序来 特殊点: ...
- mysql查询去重后的总数
mysql 查询去重 建议以后给出列名.数据示例,这样我们写的SQL你可以粘贴运行- SELECTDISTINCT表1.列2,表1.列1 FROM表1 WHERE表1.列2IN(SELECT列1FRO ...
- Mysql中按某一字段去重,并查询去重后的所有字段
1.Mysql中按某一字段去重,并查询去重后的所有字段 SELECT pnum, name FROM products AA WHERE id = (SELECT MIN(id) ...
- sql去重 ,4种查询数量方法
标题第一种 :distinct select count (distinct 订单号) from dual 标题第二种:查询去重 group by select count(订单号)aa from ( ...
最新文章
- Pyqt 窗体间传值
- 前端常见知识点三之HTML
- openstack-5:安装rabbitmq
- 使用ViewModel模式简化WPF TreeView
- 中兴软件测试过往面试题汇总
- android风格ppt模板下载,PPT模板大全app下载
- 软件设计模式、目标、原则
- ZKTeco 中控考勤机M300 plus java开发步骤 使用jacob 调用中控考勤机dll(详细配置)
- printf() 输出数据格式汇总
- 解决postgre报错ERROR #22P02 malformed array literal
- BIOS知识枝桠——PCD
- 新农合医疗保险补偿制度
- 一文详解空洞卷积(Atrous Convolution)
- vue-如何获取上一个路由地址
- PAT练习 蜜蜂寻路
- 获取员工其当前的薪水比其manager当前薪水还高的相关信息
- oracle创建存储过程,hibernate调用
- MATLAB中的乘除法 “ * ” 和 “ .* ” and “ / ” 和 “ ./ ”
- “ 试题管理系统”需求分析报告
- display:inline-bock的注意