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. 查询去重_如何在 1 秒内做到大数据精准去重?

    去重计数在企业日常分析中应用广泛,如用户留存.销售统计.广告营销等.海量数据下的去重计数十分消耗资源,动辄几分钟,甚至几小时,Apache Kylin 如何做到秒级的低延迟精确去重呢? 作者:史少锋, ...

  2. MySQL学习记录04where条件子句、联表查询、子查询

    文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...

  3. MySQL学习(8)︱DISTINCT去重与表连接

    DISTINCT去重 distinct用于在查询中返回列的唯一不同值(去重复),支持单列或多列.在实际的应用中,表中的某一列含有重复值是常见的,如employee表的dept列.如果在查询数据时,希望 ...

  4. 【MapReduce】数据去重、多表查询、倒排索引、单元测试等案例编程

    数据去重.多表查询.倒排索引.单元测试等案例编程 1 数据去重 2 多表查询 2.1 笛卡尔积 2.2 等值连接 2.3 自连接 3 倒排索引 4 单元测试 手动反爬虫,禁止转载: 原博地址 http ...

  5. Elasticsearch学习(四) - 查询①

    title: Elasticsearch学习(四)-查询① date: 2020-10-29 tags: Elasticsearch Elasticsearch学习(四)-查询① categories ...

  6. 数据库一对多做链接去重_数据库的查询命令

    条件 from / where / group by / having distinct / order by / limit 使用这些条件可以按照需求任意选择,但是顺序必须按照上面的顺序来 特殊点: ...

  7. mysql查询去重后的总数

    mysql 查询去重 建议以后给出列名.数据示例,这样我们写的SQL你可以粘贴运行- SELECTDISTINCT表1.列2,表1.列1 FROM表1 WHERE表1.列2IN(SELECT列1FRO ...

  8. Mysql中按某一字段去重,并查询去重后的所有字段

    1.Mysql中按某一字段去重,并查询去重后的所有字段 SELECT pnum, name   FROM products AA  WHERE id =        (SELECT MIN(id)  ...

  9. sql去重 ,4种查询数量方法

    标题第一种 :distinct select count (distinct 订单号) from dual 标题第二种:查询去重 group by select count(订单号)aa from ( ...

最新文章

  1. Pyqt 窗体间传值
  2. 前端常见知识点三之HTML
  3. openstack-5:安装rabbitmq
  4. 使用ViewModel模式简化WPF TreeView
  5. 中兴软件测试过往面试题汇总
  6. android风格ppt模板下载,PPT模板大全app下载
  7. 软件设计模式、目标、原则
  8. ZKTeco 中控考勤机M300 plus java开发步骤 使用jacob 调用中控考勤机dll(详细配置)
  9. printf() 输出数据格式汇总
  10. 解决postgre报错ERROR #22P02 malformed array literal
  11. BIOS知识枝桠——PCD
  12. 新农合医疗保险补偿制度
  13. 一文详解空洞卷积(Atrous Convolution)
  14. vue-如何获取上一个路由地址
  15. PAT练习 蜜蜂寻路
  16. 获取员工其当前的薪水比其manager当前薪水还高的相关信息
  17. oracle创建存储过程,hibernate调用
  18. MATLAB中的乘除法 “ * ” 和 “ .* ” and “ / ” 和 “ ./ ”
  19. “ 试题管理系统”需求分析报告
  20. display:inline-bock的注意

热门文章

  1. android设置高德的3d,高德地图3D版的使用方法
  2. 【英语学习】【WOTD】hoodwink 释义/词源/示例
  3. java事务代码_关于java中实现JDBC事务控制代码示例
  4. linux I/O-记录锁(record lock)
  5. redid过期策略_Redis数据过期策略详解
  6. 苹果新Metal API实测:四倍完爆OpenGL ES
  7. 神经网络之预测共享单车使用情况
  8. 【ASK】设置网卡启动遇到的事!
  9. salt实现lamp自动化部署
  10. 给你的数据来一个顶层设计