elasticsearch - 在弹性搜索的索引中查找唯一文档
问题描述
我的索引中有重复条目,我只想找出索引中的唯一文档。TopHits 聚合解决了这个问题,但我的另一个要求是支持对结果进行排序(跨桶)。因此我不能使用热门点击聚合。
我能想到的其他选择是编写插件或使用无痛脚本。需要帮助来解决这个问题。如果您可以将我重定向到一些示例,那就太好了。
解决方案
Top hits
聚合从完整结果集中查找值,而如果使用cardinality
它只给出过滤结果集。您可以使用cardinality
如下聚合:
{
"aggs" : {
"UNIQUE_COUNT" : {
"cardinality" : {
"field" : "your_field"
}
}
}
}
这种聚合带有一些责任,你可以找到下面的 ElasticSearch 文档来更好地理解它。链接:基数聚合
对于排序,您可以参考以下示例,您可以在terms
其中按照创建存储桶的顺序传递聚合:
{
"aggs": {
"AGG_NAME": {
"terms": {
"field": "you_field",
"size": 10,
"order": {
"UNIQUE_COUNT.doc_count": "asc"
},
"min_doc_count": 1
},
"aggs": {
"UNIQUE_COUNT": {
"cardinality": {
"field": "your_field"
}
}
}
}
}
}
推荐阅读
- c - 为什么两个指针之间有 16 个字节的差异而不是 8 个字节?
- javascript - 强制浏览器在脚本标签中加载新文件的最佳方法是什么
- swift - Swift 4.2:以下声明是什么意思
- windows - 安装新版本 Slack 时出错:暂存用户 ID 和其他错误
- c++ - 如何使用 boost::wregex?
- node.js - Mobx-state-tree SSR 双初始化客户端和服务器
- storage - 如何创建 OpenEBS cstor 池?
- ios - CSS 未在 iOS 设备上应用
- xcode - 错误:在使用 OneSignal 进行推送注册期间遇到错误:错误域 = OneSignalError 代码 = 400“
- elasticsearch - 弹性搜索高内存消耗