elasticsearch,aggregation,facet,Java,elasticsearch,Aggregation,Facet" /> elasticsearch,aggregation,facet,Java,elasticsearch,Aggregation,Facet" />

Java Elasticsearch,如何获取一个字段的所有唯一值以及总唯一值的计数?

Java Elasticsearch,如何获取一个字段的所有唯一值以及总唯一值的计数?,java,elasticsearch,aggregation,facet,Java,elasticsearch,Aggregation,Facet,在Elasticsearch中,我们使用术语方面和术语聚合来处理上述问题。不幸的是,这肯定适用于小数据集。但我们正在处理的数据大约是1000万份文件 因此,当我们通过使用聚合(设置“size”:0)或facet(使用“exclude”)查询获取字段(如company字段)的所有唯一值时,我们将无法在一次拉伸中获得整个结果。elasticsearch似乎需要很多时间才能响应,最终导致节点故障 此过程的唯一目的是统计一个字段中存在多少唯一值(例如,公司,唯一公司数) 任何建议都是可以接受的。如果您使

在Elasticsearch中,我们使用术语方面和术语聚合来处理上述问题。不幸的是,这肯定适用于小数据集。但我们正在处理的数据大约是1000万份文件

因此,当我们通过使用聚合(设置“size”:0)或facet(使用“exclude”)查询获取字段(如company字段)的所有唯一值时,我们将无法在一次拉伸中获得整个结果。elasticsearch似乎需要很多时间才能响应,最终导致节点故障

此过程的唯一目的是统计一个字段中存在多少唯一值(例如,公司,唯一公司数)


任何建议都是可以接受的。

如果您使用Elasticsearch 1.1.0或更高版本,您可以尝试使用来估计不同的计数

在您的案例中,一个简单的查询如下所示:

POST /{yourIndex}/{yourType}/_search
{
    "aggs" : {
        "company_count" : {
            "cardinality" : {
                "field" : "company.company_raw",
                "precision_threshold": 10000
            }
        }
    }
} 

您能否提供您当前的映射和查询,用于检索facet?“company”:{“type”:“string”,“fields”:{“company_raw”:{“type”:“string”,“analyzer”:“lowercaseAnalyzer”}}}。我们正在查询company_原始字段,因为它是“未分析”字段。它真的未分析吗?小写分析程序没有标记化吗?是的,它没有被分析。它是一个分析器名称,还包含标记化字段。我们已经将其设置为“关键字”。这真的很有帮助。但不同“精度阈值”值的总计数存在偏差。有办法解决这个问题吗?i、 e,为不同的“精度阈值”值获取常量值。否,
precision\u threshold
定义了一个唯一的计数,低于该计数时,计数将接近准确,因此如果使用最大值
40.000
,这是您可能获得的最佳估计值。如果你改变这个值,估计值也会改变,不能是常数。这是否意味着如果我有超过40000个唯一值,我总是会得到一个估计值?