以下转载自:http://hongweiyi.com/2013/03/apache-solr-facet-introduction/

1、什么是Faceted Search

Facet['fæsɪt]很难翻译,只能靠例子来理解了。Solr作者Yonik Seeley也给出更为直接的名字:导航(Guided Navigation)、参数化查询(Paramatic Search)。

上面是比较直接的Faceted Search例子,品牌、产品特征、卖家,均是Facet。而Apple、Lenovo等品牌,就是Facet values或者说Constraints,而Facet values所带的统计值就是Facet count/Constraint count

2、Facet使用

q = 超级本
facet = true
facet.field = 产品特性
facet.field = 品牌
facet.field = 卖家

http://…/select?q=超级本&facet=true&wt=json

&facet.field=品牌&facet.field=产品特性&facet.field=卖家

 
 

也可以提交查询条件,设置fq(filter query)。

q = 电脑
facet = true
fq = 价格:[8000 TO *]
facet.mincount = 1 // fq将不符合的字段过滤后,会显示count为0
facet.field = 产品特性
facet.field = 品牌
facet.field = 卖家

http://…/select?q=超级本&facet=true&wt=json

&fq=价格:[8000 TO *]&facet.mincount=1

&facet.field=品牌&facet.field=产品特性&facet.field=卖家

"facet_counts": {
"facet_fields": {
"品牌": [
"Apple", 4,
"Lenovo", 39
…]
"产品特性": [
"显卡", 42,
"酷睿", 38
…] …}}

  

如果用户选择了Apple这个分类,查询条件中需要添加另外一个fq查询条件,并移除Apple所在的facet.field。

http://…/select?q=超级本&facet=true&wt=json

&fq=价格:[8000 TO *]&fq=品牌:Apple&facet.mincount=1

&facet.field=品牌&facet.field=产品特性&facet.field=卖家

3、Facet参数

facet.prefix – 限制constaints的前缀

facet.mincount=0 – 限制constants count的最小返回值,默认为0

facet.sort=count – 排序的方式,根据count或者index

facet.offset=0  表示在当前排序情况下的偏移,可以做分页

facet.limit=100 – constraints返回的数目

facet.missing=false – 是否返回没有值的field

facet.date – Deprecated, use facet.range

facet.query

指定一个查询字符串作为Facet Constraint

facet.query = rank:[* TO 20]

facet.query = rank:[21 TO *]

 
"facet_counts": {
"facet_fields": {
"品牌": [
"Apple", 4,
"Lenovo", 10
…]
"产品特性": [
"显卡", 11,
"酷睿", 20
…] …}}

facet.range

http://…/select?&facet=true

&facet.range=price

&facet.range.start=5000

&facet.range.end=8000

&facet.range.gap=1000

 <result numFound="27" ... />
...
<lst name="facet_counts">
<lst name="facet_queries">
<int name="rank:[* TO 20]">2</int>
<int name="rank:[21 TO *]">15</int>
</lst>
...
 

WARNING: range范围是左闭右开,[start, end)

facet.pivot

这个是Solr 4.0的新特性,pivot和facet一样难理解,还是用例子来讲吧。

Syntax: facet.pivot=field1,field2,field3...

e.g. facet.pivot=comment_user, grade

 

#docs

#docs grade:好

#docs 等级:中

#docs 等级:差

comment_user:1

10

8

1

1

comment_user:2

20

18

2

0

comment_user:3

15

12

2

1

comment_user:4

18

15

2

1

"facet_counts":{
"facet_pivot":{
"comment_user, grade ":[{
"field":"comment_user",
"value":"",
"count":,
"pivot":[{
"field":"grade",
"value":"好",
"count":}, {
"field":"grade",
"value":"中",
"count":}, {
"field":"grade",
"value":"差",
"count":}]
}, {
"field":" comment_user ",
"value":"",
"count":,
"pivot":[{

没有pivot机制的话,要做到上面那点可能需要多次查询:

http://...q=comment&fq=grade:好&facet=true&facet.field=comment_user

http://...q=comment&fq=grade:中&facet=true&facet.field=comment_user

http://...q=comment&fq=grade:差&facet=true&facet.field=comment_user

Facet.pivot - Computes a Matrix of Constraint Counts across multiple Facet Fields. by Yonik Seeley.

上面那个解释很不错,只能理解不能翻译。

Solr的学习使用之(七)Solr高级查询facet、facet.pivot简介的更多相关文章

  1. solr与.net系列课程(七)solr主从复制

    solr与.net系列课程(七)solr主从复制    既然solr是解决大量数据全文索引的方案,由于高并发的问题,我们就要考虑solr的负载均衡了,solr提供非常简单的主从复制的配置方法,那么下面 ...

  2. Oracle学习笔记(7)——高级查询(1)

    在学习高级查询之前,我们先了解一下怎样查看Oracle数据库中的全部表.由于我们要使用到Oracle数据库中SCOTT用户下的几张表(这些表是Oracle数据库自带的表). 分组查询 分组函数的概念: ...

  3. oracle学习笔记(十一) 高级查询

    高级查询 分组查询 select * from student [where ] [having ] --二次限定 [order by] --asc升序 desc降序 默认升序 查看EMPLOYEE表 ...

  4. mysql学习第四天(高级查询)

    -- 第七章-- 1.查询入职日期最早和最晚的日期select min(hiredate),max(hiredate)from emp -- 2.查询职位以SALES开头的所有员工平均工资,最低工资, ...

  5. Mybatis学习记录(七)----Mybatis查询缓存

    1. 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sql ...

  6. MongoDB 学习笔记(二) 高级查询

    1.条件运算符 2.$all 匹配所有 3.$exists 判断字段是否存在 4.NUll 值处理 5.$mod 取模处理 6.$ne 不等于 7. $in 包含,与sql用法相同 8. $nin 不 ...

  7. Solr学习总结(七)Solr搜索引擎的整体架构

    经过前面一段时间的努力,终于把我所知道的关于solr 的内容都总结完了.前面讲到了solr 的安装配置,web管理后台的使用,solr 的查询参数和查询语法,还说到了solr的客户端 solrnet  ...

  8. Solr 6.0 学习(五)solr基本查询和高级查询

    参考:http://www.cnblogs.com/rainbowzc/p/4354224.html 查询参数 常用: q - 查询字符串,必须的. fl - 指定返回那些字段内容,用逗号或空格分隔多 ...

  9. solr课程学习系列-solr服务器配置(2)

    本文是solr课程学习系列的第2个课程,对solr基础知识不是很了解的请查看solr课程学习系列-solr的概念与结构(1) 本文以windows的solr6服务器搭建为例. 一.solr的工作环境: ...

  10. Solr初步学习

    Solr采用Lucene搜索库为核心,提供全文索引和搜索开源企业平台,提供REST的HTTP/XML和JSON的API,如果你是Solr新手,那么就和我一起来入门吧!本教程以solr4.8作为测试环境 ...

随机推荐

  1. spring mvc 绑定参数据默认值,是否必传,(RequestParam(value="id",defaultValue="1",required=true) )

    @RequestMapping(value = "/detail", method = RequestMethod.GET) public String newDetail(@Re ...

  2. Oracle的优化

    Oracle优化:物理优化和逻辑优化.物理优化:1):Oracle的运行环境.2):合理的使用优化器.3):合理配置Oracle实例参数4):建立合适的索引(减少IO)5):将索引数据和表数据分开在不 ...

  3. Java——容器(Map)

    [Map接口]  

  4. DOS命令里面的EQ、NE、GT、LT、GE、LE分别是什么意思

    EQ 就是 EQUAL等于NQ 就是 NOT EQUAL不等于 GT 就是 GREATER THAN大于 LT 就是 LESS THAN小于 GE 就是 GREATER THAN OR EQUAL 大 ...

  5. 【bzoj3195】【 [Jxoi2012]奇怪的道路】另类压缩的状压dp好题

    (上不了p站我要死了) 啊啊,其实想清楚了还是挺简单的. Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期 ...

  6. springboot-mybatis-demo遇到的坑

    目录 前言 问题&解决 1.初始化Maven工程过慢 2.Spring Boot 集成druid时时区问题和连接超时问题 3.完整工程下载 前言 环境: java version " ...

  7. docker 安装MongoDB以及设置用户

    MongoDB 是一个免费的开源跨平台面向文档的 NoSQL 数据库程序. 1.查看可用的 MongoDB 版本 访问 MongoDB 镜像库地址: https://hub.docker.com/_/ ...

  8. linux入门 一些常见命令

    chvt 切换终端 用法 1是终端 7是图形界面 sudo chvt 1 or 7 cp 复制文件/目录 -a : 通常在复制目录时使用,保存链接,文件属性并递归复制目录 -f:若文件在目标路径中则强 ...

  9. 【Java】使用@Valid+BindingResult进行controller参数校验

    @Valid @Valid注解用于校验,所属的包: javax.validation.Valid. 你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会 ...

  10. 搭建wordpress-安装xshell

    安装xshell 下载地址 https://www.netsarang.com/download/down_xsh6.html?token=RmxrTGc3VEkwN2VxSnRuRC92RENkUU ...