朋友们,
我正在做一些分析,以从数以亿计的文档中找到唯一的对。模拟示例如下所示:
文档字段 1 字段 2
- AAA : BBB
- AAA : CCC
- 购买力平价:QQ
- 购买力平价:QQ
- XXX : 年年
- XXX : 年年
- 嗯:NNN
90% 的文档包含一个唯一的对,如上面文档 3、4、5、6 和 7 中所示,我对我的聚合结果不感兴趣。我有兴趣汇总文档 1 和 2。
术语聚合查询:
“聚合”:{ “f1”:{ “条款”:{ “字段”:“字段1”, “min_doc_count”:2 }, “聚合”:{ “f2”:{ “条款”:{ “字段”:“字段 2” } } } } }
术语聚合结果
“聚合”:{ “f1”:{ “桶”:[ { “关键”:“PPP”, “文档计数”:2, “f2”:{ “桶”:[ { "key": "QQQ", “文档计数”:2 } ] } }, { “关键”:“XXX”, “文档计数”:2, “f2”:{ “桶”:[ { "key": "YYY", “文档计数”:2 } ] } }, { “钥匙”:“AAA”, “文档计数”:2, “f2”:{ “桶”:[ { “关键”:“BBB”, “文档计数”:1 }, { “关键”:“CCC”, “文档计数”:1 } ] } } ] } }
我只对聚合结果中的密钥AAA感兴趣。过滤包含不同对的聚合结果的最佳方法是什么?
我尝试了基数聚合,这导致了 unque 值计数。但是,我无法从聚合结果中过滤掉我不感兴趣的内容。
基数聚合查询
“聚合”:{ “f1”:{ “条款”:{ “字段”:“字段1”, “min_doc_count”:2 }, “聚合”:{ “f2”:{ “基数”:{ “字段”:“字段 2” } } } } }
基数聚合结果
“聚合”:{ “f1”:{ “桶”:[ { “关键”:“PPP”, “文档计数”:2, “f2”:{ “价值”:1 } }, { “关键”:“XXX”, “文档计数”:2, “f2”:{ “价值”:1 } }, { “钥匙”:“AAA”, “文档计数”:2, “f2”:{ “价值”:2 } } ] } }
至少如果我可以按基数排序,那将有助于我找到一些解决方法。请在这方面帮助我。
PS:编写 spark/mapreduce 程序来后处理/过滤聚合结果不是此问题的预期解决方案。