zoukankan      html  css  js  c++  java
  • elasticsearch 中文API facets(⑩)

    facets

    Elasticsearch提供完整的java API用来支持facets。在查询的过程中,将需要计数的facets添加到FacetBuilders中。然后将该FacetBuilders条件到查询请求中。

    SearchResponse sr = node.client().prepareSearch()
            .setQuery( /* your query */ )
            .addFacet( /* add a facet */ )
            .execute().actionGet();
    

    为了构建facets请求,需要用到FacetBuilders帮助类。你只需要在你的程序中导入它即可。

    import org.elasticsearch.search.facet.FacetBuilders.*;
    

    terms facet

    准备一个facet请求

    下面的例子新建一个facet请求

    FacetBuilders.termsFacet("f")
        .field("brand")
        .size(10);
    

    利用facet响应

    import org.elasticsearch.search.facet.terms.*;
    
    // sr is here your SearchResponse object
    TermsFacet f = (TermsFacet) sr.getFacets().facetsAsMap().get("f");
    
    f.getTotalCount();      // Total terms doc count
    f.getOtherCount();      // Not shown terms doc count
    f.getMissingCount();    // Without term doc count
    
    // For each entry
    for (TermsFacet.Entry entry : f) {
        entry.getTerm();    // Term
        entry.getCount();   // Doc count
    }
    

    范围facet

    准备一个facet请求

    下面的例子新建一个facet请求

    FacetBuilders.rangeFacet("f")
        .field("price")         // Field to compute on
        .addUnboundedFrom(3)    // from -infinity to 3 (excluded)
        .addRange(3, 6)         // from 3 to 6 (excluded)
        .addUnboundedTo(6);     // from 6 to +infinity
    

    利用facet响应

    import org.elasticsearch.search.facet.range.*;
    
    // 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

    准备一个facet请求

    下面的例子新建一个facet请求

    HistogramFacetBuilder facet = FacetBuilders.histogramFacet("f")
        .field("price")
        .interval(1);
    

    利用facet响应

    import org.elasticsearch.search.facet.histogram.*;
    // 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)
    }
    

    日期直方图(Histogram) Facet

    准备一个facet请求

    下面的例子新建一个facet请求

    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"
    

    利用facet响应

    import org.elasticsearch.search.facet.datehistogram.*;
    // 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)
    }
    

    过滤facet(不是facet过滤)

    准备一个facet请求

    下面的例子新建一个facet请求

    FacetBuilders.filterFacet("f",
        FilterBuilders.termFilter("brand", "heineken"));    // Your Filter here
    

    利用facet响应

    import org.elasticsearch.search.facet.filter.*;
    
    // sr is here your SearchResponse object
    FilterFacet f = (FilterFacet) sr.getFacets().facetsAsMap().get("f");
    f.getCount();   // Number of docs that matched
    

    查询facet

    准备一个facet请求

    下面的例子新建一个facet请求

    FacetBuilders.queryFacet("f",
        QueryBuilders.matchQuery("brand", "heineken"));
    

    利用facet响应

    import org.elasticsearch.search.facet.query.*;
    // sr is here your SearchResponse object
    QueryFacet f = (QueryFacet) sr.getFacets().facetsAsMap().get("f");
    
    f.getCount();   // Number of docs that matched
    

    统计

    准备一个facet请求

    下面的例子新建一个facet请求

    FacetBuilders.statisticalFacet("f")
       .field("price");
    

    利用facet响应

    import org.elasticsearch.search.facet.statistical.*;
    // sr is here your SearchResponse object
    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 Facet

    准备一个facet请求

    下面的例子新建一个facet请求

    FacetBuilders.termsStatsFacet("f")
        .keyField("brand")
        .valueField("price");
    

    利用facet响应

    // sr is here your SearchResponse object
    TermsStatsFacet f = (TermsStatsFacet) sr.getFacets().facetsAsMap().get("f");
    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
        entry.getCount();           // Doc count
        entry.getMin();             // Min value
        entry.getMax();             // Max value
        entry.getMean();            // Mean
        entry.getTotal();           // Sum of values
    }
    

    地理距离Facet

    准备一个facet请求

    下面的例子新建一个facet请求

    FacetBuilders.geoDistanceFacet("f")
        .field("pin.location")              // Field containing coordinates we want to compare with
        .point(40, -70)                     // Point from where we start (0)
        .addUnboundedFrom(10)               // 0 to 10 km (excluded)
        .addRange(10, 20)                   // 10 to 20 km (excluded)
        .addRange(20, 100)                  // 20 to 100 km (excluded)
        .addUnboundedTo(100)                // from 100 km to infinity (and beyond ;-) )
        .unit(DistanceUnit.KILOMETERS);     // All distances are in kilometers. Can be MILES
    

    利用facet响应

    // sr is here your SearchResponse object
    GeoDistanceFacet f = (GeoDistanceFacet) sr.getFacets().facetsAsMap().get("f");
    
    // For each entry
    for (GeoDistanceFacet.Entry entry : f) {
        entry.getFrom();            // Distance from requested
        entry.getTo();              // Distance to requested
        entry.getCount();           // Doc count
        entry.getMin();             // Min value
        entry.getMax();             // Max value
        entry.getTotal();           // Sum of values
        entry.getMean();            // Mean
    }
    

    facet过滤器(不是过滤facet)

    默认情况下,不管过滤器存在与否,facet都是作用在查询的结果集上。如果你需要计数带有过滤器的facet,你能够通过AbstractFacetBuilder#facetFilter(FilterBuilder)添加 过滤器到任何facet上。

    FacetBuilders
        .termsFacet("f").field("brand") // Your facet
        .facetFilter( // Your filter here
            FilterBuilders.termFilter("colour", "pale")
        );
    

    例如,你可以在你的查询中重用创建的过滤器

    // A common filter
    FilterBuilder filter = FilterBuilders.termFilter("colour", "pale");
    
    TermsFacetBuilder facet = FacetBuilders.termsFacet("f")
        .field("brand")
        .facetFilter(filter);                           // We apply it to the facet
    
    SearchResponse sr = node.client().prepareSearch()
        .setQuery(QueryBuilders.matchAllQuery())
        .setFilter(filter)                              // We apply it to the query
        .addFacet(facet)
        .execute().actionGet();
    

    作用域

    默认情况下,facet作用在查询的结果集上。但是,不管是哪个查询,你可以用global参数去计算来自于索引中的所有文档的facet。

    TermsFacetBuilder facet = FacetBuilders.termsFacet("f")
        .field("brand")
        .global(true);
  • 相关阅读:
    c# proto文件导入报错 File not found. Import "common.proto" was not found or had errors.
    拓端tecdat|Python用稀疏、高斯随机投影和主成分分析PCA对MNIST手写数字数据进行降维可视化
    拓端tecdat|上海无印良品地理空间分布特征与选址策略可视化研究
    拓端tecdat|Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化
    拓端tecdat|R语言分布滞后非线性模型(DLNM)空气污染研究温度对死亡率影响建模应用
    拓端tecdat|R语言用AR,MA,ARIMA 模型进行时间序列预测
    拓端tecdat|R语言广义二次跳跃、非线性跳跃扩散过程转移函数密度的估计及其应用
    拓端tecdat|Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析
    拓端tecdat|基于机器学习的印度肝脏病诊断分析
    拓端tecdat|R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型
  • 原文地址:https://www.cnblogs.com/bmaker/p/5472440.html
Copyright © 2011-2022 走看看