有效地计算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
“(I / S) – (T / C)] * [(I / S)/(T / C)] = 0.371 …” 哪里: > C是集合中所有文档的数量 由于实际原因(我拥有的数据量非常大,而且还有很大的ElasticSearch内存要求),我正在寻求在SQL中直接在代码中实现重要术语聚合. 我一直在寻找一些可能优化这种查询的方法,特别是降低内存需求并增加查询速度,牺牲一些错误的边缘 – 但到目前为止,我还没有破解.在我看来,这: 变量C和S易于缓存或可查询. 我也在看MinHash,但从描述看来,它不能应用于这里. 有谁知道一些聪明的算法或数据结构有助于解决这个问题? 解决方法我怀疑一个SQL impl会更快.Lucene提前保持C和T的值. S是从查询结果导出的简单计数,并且使用O(1)数据结构查找.主要成本是在所选领域中观察到的每个术语的许多T查找.使用min_doc_count通常有助于大大减少这些查找的数量.
你是否考虑使用doc值来更好地管理弹性搜索记忆?见https://www.elastic.co/blog/support-in-the-wild-my-biggest-elasticsearch-problem-at-scale (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |