有效地计算SQL中的重要术语

前端之家收集整理的这篇文章主要介绍了有效地计算SQL中的重要术语前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
之前我被引入了ElasticSearch significant terms aggregation,并且对于这个指标是多么的好和相关性而感到非常惊讶.对于不熟悉它的人来说,这是一个非常简单的概念 – 对于给定的查询(前景集),给定的属性对背景集的统计意义进行评分.

例如,如果我们在询问英国运输警察中最重要的犯罪类型:

C = 5,064,554 -- total number of crimes
T =    66,799 -- total number of bicycle thefts
S =    47,347 -- total number of crimes in British Transport Police
I =     3,640 -- total number of bicycle thefts in British Transport Police

Ordinarily,bicycle thefts represent only 1% of crimes (66,799/5,554) but for the British Transport Police,who handle crime on railways and stations,7% of crimes (3,640/47,347) is a bike theft. This is a significant seven-fold increase in frequency.

“(I / S) – (T / C)] * [(I / S)/(T / C)] = 0.371 …”

哪里:

> C是集合中所有文档的数量
> S是与查询匹配的文档数量
> T是具体术语的文档数量
>我是与S和T相交的文档数量

由于实际原因(我拥有的数据量非常大,而且还有很大的ElasticSearch内存要求),我正在寻求在sql中直接在代码中实现重要术语聚合.

我一直在寻找一些可能优化这种查询方法,特别是降低内存需求并增加查询速度,牺牲一些错误的边缘 – 但到目前为止,我还没有破解.在我看来,这:

变量C和S易于缓存或可查询.
>变量T可以从Count-Min Sketch派生而不是查询数据库.
>然而,变量我似乎不可能用T来计算最小素描.

我也在看MinHash,但从描述看来,它不能应用于这里.

有谁知道一些聪明的算法或数据结构有助于解决这个问题?

解决方法

我怀疑一个sql impl会更快.
Lucene提前保持C和T的值.
S是从查询结果导出的简单计数,并且使用O(1)数据结构查找.主要成本是在所选领域中观察到的每个术语的许多T查找.使用min_doc_count通常有助于大大减少这些查找的数量.

For practical reasons (the sheer amount of data I have and huge ElasticSearch memory requirements

你是否考虑使用doc值来更好地管理弹性搜索记忆?见https://www.elastic.co/blog/support-in-the-wild-my-biggest-elasticsearch-problem-at-scale

猜你在找的MsSQL相关文章