TermsFacet
可以指定一个字段,es将返回在指定字段中使用最多的词项,size指定了最多返回多少个最频繁词项。包含其他词项的文档将
被包含在结果的other字段中计数。
//生成一般查询的统计 TermsFacetBuilder termsFacet = FacetBuilders.termsFacet("termF1").field("accountId").size(10); SearchResponse sr = client.prepareSearch("hermes3") .setQuery(QueryBuilders.matchAllQuery()) .addFacet(termsFacet) .execute().actionGet(); TermsFacet f = (TermsFacet) sr.getFacets().facetsAsMap().get("f"); System.out.println(f.getTotalCount()); System.out.println(f.getOtherCount()); System.out.println(f.getMissingCount()); for (TermsFacet.Entry entry : f) { System.out.println("t:" + entry.getTerm()); // Term System.out.println("c:" + entry.getCount()); // Doc count System.out.println("----"); }
Range Facet
能够获得一个属于指定范围集的文档个数。例如我们可以获取某个字段中,小于90、90-180、以及大于180的文档个数。
FacetBuilders.rangeFacet("f") .field("price") // Field to compute on .addUnboundedFrom(90) // from -infinity to 3 (excluded) .addRange(90, 180) // from 3 to 6 (excluded) .addUnboundedTo(180); // from 6 to +infinity
// sr is here your SearchResponse object RangeFacet f = (RangeFacet) sr.getFacets().facetsAsMap().get("f"); // For each entry for (RangeFacet.Entry entry : f) { entry.getFrom(); // Range from requested entry.getTo(); // Range to requested entry.getCount(); // Doc count entry.getMin(); // Min value entry.getMax(); // Max value entry.getMean(); // Mean entry.getTotal(); // Sum of values }
Histogram Facet
可以使我们能够对字段取值按间隔统计建立直方图(针对数值型或者日期型字段)。比如查询price字段,每隔1(interval)有多少文档。
HistogramFacetBuilder facet = FacetBuilders.histogramFacet("f") .field("price") .interval(1);
// sr is here your SearchResponse object HistogramFacet f = (HistogramFacet) sr.getFacets().facetsAsMap().get("f"); // For each entry for (HistogramFacet.Entry entry : f) { entry.getKey(); // Key (X-Axis) entry.getCount(); // Doc count (Y-Axis) }
// 日期类型 FacetBuilders.dateHistogramFacet("f") .field("date") // Your date field .interval("year"); // You can also use "quarter", "month", "week", "day", // "hour" and "minute" or notation like "1.5h" or "2w"
// sr is here your SearchResponse object DateHistogramFacet f = (DateHistogramFacet) sr.getFacets().facetsAsMap().get("f"); // For each entry for (DateHistogramFacet.Entry entry : f) { entry.getTime(); // Date in ms since epoch (X-Axis) entry.getCount(); // Doc count (Y-Axis) }
Filter Fact
简单的统计类型,返回与指定过滤相匹配的文档个数。
FacetBuilders.filterFacet("f", FilterBuilders.termFilter("brand", "heineken"));
FilterFacet f = (FilterFacet) sr.getFacets().facetsAsMap().get("f"); f.getCount();
Query Facet
最简单的统计类型,能够在统计的结果中得到匹配指定查询的文档个数。(类似count API???)
FacetBuilders.queryFacet("f", QueryBuilders.matchQuery("brand", "heineken"));
QueryFacet f = (QueryFacet) sr.getFacets().facetsAsMap().get("f"); f.getCount();
Statistical
可以让我们对一个数值型字段计算统计信息。我们可以得到个数、总和、平方和、均值、最小值,最大值、方差和标准差。
FacetBuilders.statisticalFacet("f") .field("price");
StatisticalFacet f = (StatisticalFacet) sr.getFacets().facetsAsMap().get("f"); f.getCount(); // Doc count 文档个数 f.getMin(); // Min value 最小值 f.getMax(); // Max value 最大值 f.getMean(); // Mean 平均值 f.getTotal(); // Sum of values 最大值 f.getStdDeviation(); // Standard Deviation 标准差 f.getSumOfSquares(); // Sum of Squares 平方和 f.getVariance(); // Variance 方差
Terms stats
综合了statistical + terms统计。比如希望对brand进行terms统计,然后又同时对price字段进行值的划分。
FacetBuilders.termsStatsFacet("f") .keyField("brand") .valueField("price");
TermsStatsFacet f = (TermsStatsFacet) sr.getFacets().facetsAsMap().get("f"); // terms的结果 f.getTotalCount(); // Total terms doc count f.getOtherCount(); // Not shown terms doc count f.getMissingCount(); // Without term doc count // For each entry for (TermsStatsFacet.Entry entry : f) { entry.getTerm(); // Term terms的结果 entry.getCount(); // Doc count entry.getMin(); // Min value entry.getMax(); // Max value entry.getMean(); // Mean entry.getTotal(); // Sum of values }
Geo Distance Facet
暂不介绍。如有需要再查资料了解。