Solr的学习使用之(七)Solr高级查询facet、facet.pivot简介
以下转载自: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简介的更多相关文章
- solr与.net系列课程(七)solr主从复制
solr与.net系列课程(七)solr主从复制 既然solr是解决大量数据全文索引的方案,由于高并发的问题,我们就要考虑solr的负载均衡了,solr提供非常简单的主从复制的配置方法,那么下面 ...
- Oracle学习笔记(7)——高级查询(1)
在学习高级查询之前,我们先了解一下怎样查看Oracle数据库中的全部表.由于我们要使用到Oracle数据库中SCOTT用户下的几张表(这些表是Oracle数据库自带的表). 分组查询 分组函数的概念: ...
- oracle学习笔记(十一) 高级查询
高级查询 分组查询 select * from student [where ] [having ] --二次限定 [order by] --asc升序 desc降序 默认升序 查看EMPLOYEE表 ...
- mysql学习第四天(高级查询)
-- 第七章-- 1.查询入职日期最早和最晚的日期select min(hiredate),max(hiredate)from emp -- 2.查询职位以SALES开头的所有员工平均工资,最低工资, ...
- Mybatis学习记录(七)----Mybatis查询缓存
1. 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sql ...
- MongoDB 学习笔记(二) 高级查询
1.条件运算符 2.$all 匹配所有 3.$exists 判断字段是否存在 4.NUll 值处理 5.$mod 取模处理 6.$ne 不等于 7. $in 包含,与sql用法相同 8. $nin 不 ...
- Solr学习总结(七)Solr搜索引擎的整体架构
经过前面一段时间的努力,终于把我所知道的关于solr 的内容都总结完了.前面讲到了solr 的安装配置,web管理后台的使用,solr 的查询参数和查询语法,还说到了solr的客户端 solrnet ...
- Solr 6.0 学习(五)solr基本查询和高级查询
参考:http://www.cnblogs.com/rainbowzc/p/4354224.html 查询参数 常用: q - 查询字符串,必须的. fl - 指定返回那些字段内容,用逗号或空格分隔多 ...
- solr课程学习系列-solr服务器配置(2)
本文是solr课程学习系列的第2个课程,对solr基础知识不是很了解的请查看solr课程学习系列-solr的概念与结构(1) 本文以windows的solr6服务器搭建为例. 一.solr的工作环境: ...
- Solr初步学习
Solr采用Lucene搜索库为核心,提供全文索引和搜索开源企业平台,提供REST的HTTP/XML和JSON的API,如果你是Solr新手,那么就和我一起来入门吧!本教程以solr4.8作为测试环境 ...
随机推荐
- [LightOJ1240]Point Segment Distance 题解
题意简述 原题LightOJ 1240,Point Segment Distance(3D). 求三维空间里线段AB与C. 题解 我们设一个点在线段AB上移动,然后发现这个点与原来的C点的距离呈一个单 ...
- Ubuntu 16.04下使用docker部署ceph集群
ceph集群docker部署 通过docker可以快速部署小规模Ceph集群的流程,可用于开发测试. 以下的安装流程是通过linux shell来执行的:假设你只有一台机器,装了linux(如Ubun ...
- sh_01_判断年龄
sh_01_判断年龄 # 1. 定义一个整数变量记录年龄 age = 15 # 2. 判断是否满了18岁 if age >= 18: # 3. 如果满了18岁,可以进网吧嗨皮 print(&qu ...
- sh_07_买苹果增强版
sh_07_买苹果增强版 # 1. 输入苹果的单价 price_str = input("苹果的单价:") # 2. 输入苹果的重量 weight_str = input(&quo ...
- nginx做反向代理时出现302错误(转载)
现象:nginx在使用非80端口做反向代理时,浏览器访问发现返回302错误 详细现象如下: 浏览器请求登录页: 输入账号密码点击登录: 很明显登录后跳转的地址少了端口号. 原因:proxy.conf文 ...
- 《SQL Server 2012 T-SQL基础》读书笔记 - 6.集合运算
Chapter 6 Set Operators 语法如下: Input Query1 <set_operator> Input Query2 [ORDER BY ...] 有ORDER B ...
- 数据库为什么使用B+树而不是B树
B树和B+树的区别主要有两点: 在B树中,你可以将键和值存放在内部节点和叶子节点,但在B+树中,内部节点都是键,没有值.叶子节点同时存放键和值 B+树的叶子节点有一条链相连,而B+树的叶子节点各自独立 ...
- 高通 8x26 andorid light sensor(TSL258x) 开发【转】
本文转载自:http://www.voidcn.com/blog/u012296694/article/p-1669831.html 前言 8926平台的sensor架构与之前的平台完全不同,实际上已 ...
- leetcode-mid-Linked list-160 Intersection of Two Linked Lists-NO
mycode 用了反转链表,所以不符合题意 参考: 思路: 1 先让长的链表先走,然后相同长度下看是否相遇 class Solution(object): def getIntersectionNod ...
- 源码编译安装Apache/2.4.37-------踩了无数坑,重装了十几次服务器才会的,不容易啊!
1.先进入/usr/local/中创建三个文件夹 apr apr-util apache cd /usr/local目录 mkdir apr mkdir apr-util mkdir apache 2 ...