Elasticsearch学习之查询去重
1. 实现查询去重、分页,例如:实现依据qid去重,createTime排序,命令行为:
GET /nb_luban_answer/_search
{
"query": {
"match": {
"status":
}
},
"sort": [
{
"createTime": {
"order": "desc"
}
}
],"aggs": {
"qid": {
"terms": {
"field": "qid",
"size":
},"aggs": {
"rated": {
"top_hits": {
"sort": [{
"createTime": {"order": "desc"}
}],
"size":
}
}
}
}
},
"size": ,
"from":
}
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()
); SearchResponse sResponse = Tool.CLIENT.prepareSearch(indexName).setTypes(typeName)
.setQuery(QueryBuilders.matchQuery("status",))
.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":
}
}
}
}
因为目标是得到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 学习记录之ES查询添加排序字段和使用missing或existing字段查询
ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...
- ElasticSearch 学习记录之父子结构的查询
父子结构 父亲type属性查询子type 的类型 父子结构的查询,可以通过父亲类型的字段,查询出子类型的索引信息 POST /product/_search { "query": ...
- ELK 学习笔记之 elasticsearch bool组合查询
elasticsearch bool组合查询: 相当于sql:where _type = 'books' and (price = 500 or title = 'bigdata') Note: mu ...
- Elasticsearch文档查询
简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...
- ElasticSearch 学习记录之ES几种常见的聚合操作
ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...
- ElasticSearch 学习记录之ES短语匹配基本用法
短语匹配 短语匹配故名思意就是对分词后的短语就是匹配,而不是仅仅对单独的单词进行匹配 下面就是根据下面的脚本例子来看整个短语匹配的有哪些作用和优点 GET /my_index/my_type/_sea ...
- ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理
分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...
- ElasticSearch 学习记录之如任何设计可扩容的索引结构
扩容设计 扩容的单元 一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合 一个分片即为 扩容的单元 . 一个最小的索引拥有一个分片. 一个只有一个分片的索引 ...
- ElasticSearch 学习记录之ES高亮搜索
高亮搜索 ES 通过在查询的时候可以在查询之后的字段数据加上html 标签字段,使文档在在web 界面上显示的时候是由颜色或者字体格式的 GET /product/_search { "si ...
随机推荐
- CentOS7 从管理员组中 新增/删除用户
$ sudo usermod -aG wheel usera #增加 $ sudo usermod -G usera usera # 删除
- 数据源(HikariCP)
HikariCP 是一个高性能的 JDBC 连接池组件.下图是性能的比较测试结果: 自从看到了这张图,我就对于我之前一直在使用了 c3p0 产生了深深的怀疑,迫切的期望得到对应的数据来优化我的代码. ...
- Godray
软管的这个有点蛋疼..应该是我材质没弄好 最后发现不是材质,是法线不正确,调整后
- c fopen fread 错误
真的被,读取一个txt文本,结果一个早上都没搞好 程序如下: 能看出哪里有问题么,输出字符串,得到的结果后面有“屯”或则 “烫”,单个字符输出来也有,为何,搜啊搜,改txt的内容,依旧不行 最后 改f ...
- iOS: hide UITextField Cursor
Simply subclass UITextField and override caretRectForPosition (继承 UITextField 并且重写 [UITextField care ...
- Excel破解密码代码
Option ExplicitPublic Sub AllInternalPasswords()' Breaks worksheet and workbook structure passwords. ...
- Launchpad图标大小怎么调整?
一.首先运行“终端”程序,执行以下命令: 1.调整每一列显示图标数量,7 表示每一列显示7个 defaults write com.apple.dock springboard-rows -int 7 ...
- maven pom文件详解
http://www.blogjava.net/hellxoul/archive/2013/05/16/399345.html http://blog.csdn.net/houpengfei111/a ...
- datetimerangepicker配置及默认时间段展示
<script type="text/javascript"> $(document).ready(function (){ //时间插件 $('#reportrang ...
- text/html和text/plain的区别
1.text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理. 2.text/plain的意思是 ...