Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有效地计算SQL中的重要术语_Sql_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Query Optimization_Aggregation_Significant Terms - Fatal编程技术网 elasticsearch,query-optimization,aggregation,significant-terms,Sql,elasticsearch,Query Optimization,Aggregation,Significant Terms" /> elasticsearch,query-optimization,aggregation,significant-terms,Sql,elasticsearch,Query Optimization,Aggregation,Significant Terms" />

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

有效地计算SQL中的重要术语,sql,elasticsearch,query-optimization,aggregation,significant-terms,Sql,elasticsearch,Query Optimization,Aggregation,Significant Terms,我是在不久前被介绍到ElasticSearch的,我对这个指标的良好性和相关性感到非常惊讶。对于那些不熟悉它的人来说,这是一个非常简单的概念——对于给定的查询(前景集),给定的属性根据背景集的统计显著性进行评分 例如,如果我们查询英国交通警察局最重要的犯罪类型: C = 5,064,554 -- total number of crimes T = 66,799 -- total number of bicycle thefts S = 47,347 -- total number

我是在不久前被介绍到ElasticSearch的,我对这个指标的良好性和相关性感到非常惊讶。对于那些不熟悉它的人来说,这是一个非常简单的概念——对于给定的查询(前景集),给定的属性根据背景集的统计显著性进行评分

例如,如果我们查询英国交通警察局最重要的犯罪类型:

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
通常,自行车盗窃仅占犯罪的1%(66799/5064554),但对于处理铁路和车站犯罪的英国交通警察来说,7%(3640/47347)的犯罪是自行车盗窃。这是一个显着的七倍增加的频率

“自行车盗窃”的意义是
[(I/S)-(T/C)]*[(I/S)/(T/C)]=0.371…

其中:

  • C是集合中所有文档的编号
  • S是与查询匹配的文档数
  • T是具有特定术语的文档数
  • I是与ST相交的文档数

出于实际原因(我拥有的数据量和巨大的ElasticSearch内存需求),我希望在SQL中或直接在代码中实现重要术语聚合

我一直在寻找一些可能优化此类查询的方法,特别是降低内存需求和提高查询速度,但以牺牲一些误差为代价——但到目前为止,我还没有破解它。在我看来:

  • 变量CS易于缓存或查询
  • 变量T可以从a派生,而不是查询数据库
  • 然而,变量I似乎无法从T中使用Count Min Sketch导出
我也在看,但从描述来看,它似乎不能应用在这里


有人知道一些聪明的算法或数据结构可以帮助解决这个问题吗?

我怀疑SQL impl会更快。 C和T的值由Lucene提前保持。 S是从查询结果派生的简单计数,I使用O(1)数据结构进行查找。主要成本是对所选字段中观察到的每个术语进行多次T查找。使用min_doc_count通常有助于大幅减少这些查找的数量

出于实际原因(我拥有的数据量和巨大的ElasticSearch内存需求


您是否考虑过使用文档值更好地管理elasticsearch内存?请参阅

对于前景集足够小的情况,一个有效的解决方案是可能的。这样,您就可以处理前景集中的所有文档了

  • 收集所选字段前景集中出现的所有术语的集合{Xk},以及它们在前景集中的频率{fk}

  • 对于每个Xk

    • 计算Xk的显著性为(fk-fk/fk),其中fk=Tk/C是背景集中Xk的频率
  • 选择具有最高重要性值的术语

  • 然而,由于这种方法的简单性,我想知道ElasticSearch是否已经包含了这种优化。如果没有,那么它很快就会包含!

    出于实际原因(我拥有的数据量和巨大的ElasticSearch内存需求),您似乎可以使用Count Min Sketch
    从S中导出I。
    您能详细说明一下吗?