Solr搜索统计 JSON Faceting API

本文详细介绍了Solr的JSON Facet API,该API在Solr5中引入,旨在改进搜索统计和聚合功能。内容涵盖JSON Facet API的背景、查询语法、类型、功能和排序方式,强调其简洁性和灵活性。通过实例展示了如何使用JSON Facet API进行分桶统计、范围查询、查询统计、pivot分面和间隔分面,以满足各种统计需求。
摘要由CSDN通过智能技术生成

一、背景

我是您不知道的统计和聚合,我很漂亮、也很简洁,我是结构化,有些迷人的新查询语法。您可以不知道statsfacet,但您不应该不知道我,我是Solr JSON Facet API,出身于Solr5。

solr 5.3的时候完全重写了Solr查询语法,其中最为重要的就是重写Solr Facet查询语法。一直以来Solr在统计部分查询语法,以及Solr的函数的使用上饱受诟病。尤其是当Facet遇上stats时,她变得使我们疯狂,因为她十分复杂,非常不好用。

JSON Facet API基本上已经实现了SQL的能力,如果不考虑多表问题的话,即不跨多个Collection做JOIN等操作。

为此,Solr完全重写了一套查询语法来支持和改善我们在统计方面的需求和体验。Solr5以后一直在往OLAP方向努力,她变得不再只是一个搜索引擎,而且是一个NoSQL数据库。当然,她很早之前就定位在NoSQL数据库上,其实并没有往这方面发力(个人观点)。

二、JSON Facet查询语法

1. what is JSON Facet API

完全支持原有Facet统计,以及Faceet+stats组合功能,即是把原本Stats中非常好用的统计函数带到JSON Facet API中。除此之外,JSON Facet API还带新一个全新概念Facet Domain

简单的说,JSON Facet API = JSON Request PAI + Stats + Faceting。把几个特征合到一起的怪物即是我们的JSON Facet API了,这是非常非常棒的。

2. Facet Syntax

1. <facet_name> : { <type_type> : <facet_parameters> }
2. <facet_name> : { type : facet_type, <facet_facet_parameters>}

这语法非常简单,为了你可直观感受我们JSON Facet的魅力,我们先来看个比较有意思的例子。

Q1
curl http://solr.daming.loc:89893/solr/daming/select?rows=0&json.facet={
   
        total_price:'sum(price)', 
        price:'avg(price)'
    }

respones :   
{
   
    "response":{
   "numFound":250126,"start":0,"docs":[]},
    "facets":{
   
        "count":250126,
        "total_price":3.372768789E9,
        "price":13484.548634460922
    }
}

直接通过一个聚合函数直接来计算你想要的结果,这个在之前做法是要通过stats component来完成。

curl http://solr.daming.loc:8983/solr/daming/select?rows=0&stats=true&stats.field=price

response :
{
   
    "response": {
   
        "numFound": 250121,
        "start": 0,
        "docs": []
    },
    "stats": {
   
        "stats_fields": {
   
            "price": {
   
                "min": 1.0,
                "max": 2545000.0,
                "count": 250121,
                "missing": 0,
                "sum": 3.372768789E9,
                "sumOfSquares": 1.01177312029675E14,
                "mean": 13484.548634460922,
                "stddev": 14922.50991024902
            }
        }
    }
}

此时,你可能会觉得原来语法会更简单。确实,从查询语句来说,着实是原来方法简洁一些,但是我们再来看一下Response的内容。新版API查询的响应结果就比较统一,对于旧版本API来说,每种组件的结果集都是千奇百怪,各不一样的。这给接口用调用方带来N多问题,提供方也很烦,在写接口文档的时候,需要做大量解释。

Q2

上面的例子想说JSON Facet API好,其实是比较牵强的,那么我们继续来看,直至说服来用我们新版API。

前提:这是一张销售表,表其中有订单ID、用户ID、交易平台、单价、数量、成交金额等

需求,统计每个平台交易情况,含用户数、交易总额、客单价等

即是分平台统计,独立用户数、对成交金额字段进行一次Sum计算、对成交金额进行Avg计算。用Sql表达即是

select 
    platform, count(distinct user_id), sum(price), 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值