Solr高级查询Facet
一、什么是facet
solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索。
facet主要用于导航实现渐进式精确搜索,从两张图来看看Facet用途。 (图1)当进入重庆二手车列表时搜索条件会列出所有品牌、车系、价格区间、车系年贷款等等。 (图2)当你点击大众时页面刷新车系会列出大众所属的所有车系、价格区间。顾名思义我虽solr facet的理解也就是: 当然,你从京东导航、淘宝导航也能看到如此效果,这样的场景下就是solr facet扮演的角色。


二、facet查询
在接触facet查询过程中可以在solr控制台里多观察查询路径的变化及返回response的变化。
2.1 facet.field使用
q=条件
facet=true or facet=on
facet.fields=品牌
facet.fields=车系
http://localhost:8080/solr/select/?q=*:*&facet=on&facet.field=品牌&facet.field=车系
<response>
<lst name="responseHeader">......</lst>
<result name="response" numFound="" start="">...</result>
<lst name="facet_counts">
<lst name="facet_queries" />
<lst name="facet_fields">
<lst name="品牌">
<int name="大众"></int>
<int name="奥迪"></int>
<int name="宝马"></int>
</lst>
<lst name="车系">
<int name="POLO"></int>
<int name="迈腾"></int>
</lst>
</lst>
<lst name="facet_dates" />
<lst name="facet_ranges" />
</lst>
</response>
2.2 facet.query 查询
facet.query类似于filter query的语法。可以提供自定义区间查询,可以对任何字段进行区间筛选。
q=条件
facet=true
&facet.query=price:[*+TO+]
&facet.query=price:[3.01+TO+]
http://localhost:8080/solr/select/?q=*:*&fq=price%3A%5B3.01+TO+5%5D+&facet=true //注意使用facet.query时不再是facet.query字段,而是fq字段。
<response>
<lst name="responseHeader">......</lst>
<result name="response" numFound="" start="">...</result>
<lst name="facet_counts">
<lst name="facet_queries">
<int name="price:[*+TO+3]"></int>
<int name="price:[3.01+5]"></int>
</lst>
<lst name="facet_fields"/>
<lst name="facet_dates" />
<lst name="facet_ranges" />
</lst>
</response>
2.3 facet.Date
http://localhost:8080/solr/select?q=*:*&rows=0&facet=true&facet.date=added&facet.date.start=NOW/DAY-30DAYS&facet.date.end=NOW/DAY&facet.date.gap=+7DAY
<int name="2010-11-08T00:00:00Z"></int>
<int name="2010-11-15T00:00:00Z"></int>
<int name="2010-11-22T00:00:00Z"></int>
<int name="2010-11-29T00:00:00Z"></int>
<int name="2010-12-06T00:00:00Z"></int>
2.4 key操作符
&facet=on
&facet.field={!key=中央处理器}cpu
&facet.field={!key=显卡}videoCard
2.5 什么字段适合用facet呢?
facet中适宜的字段一般代表某个实体的公共属性,比如品牌、型号、价格区间、作者、厂商、书籍出版商等。
四、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.method 取值为enum或fc,默认为fc.该字段表示了两种Facet的算法,与执行效率相关.
facet.date、facet.date.start、facet.date.end、facet.date.gap、facet.date.hardend
wiki https://wiki.apache.org/solr/SimpleFacetParameters
参考资料
http://www.coin163.com/java/docs/201310/d_3010029802.html
http://www.tuicool.com/articles/Iv2UjiU
http://blog.csdn.net/zhangshuliai/article/details/8022316
Solr高级查询Facet的更多相关文章
- Solr的学习使用之(七)Solr高级查询facet、facet.pivot简介
以下转载自:http://hongweiyi.com/2013/03/apache-solr-facet-introduction/ 1.什么是Faceted Search Facet['fæsɪt] ...
- Solr聚合查询
1 分组查询 概述:Solr常用的分组查询有两种,Facet分组和Group分组,分别以下列出这两种查询: 1.1 Facet分组 solr种以导航为目的的查询结果成为facet,在用户 ...
- 【转】Solr客户端查询参数总结
今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...
- Solr 排除查询
前言 solr排除查询也就是我们在数据库和程序中经常处理的不等于,solr的语法是在定语前加[-].. StringBuilder sbHtml=new StringBuilder(); shBhtm ...
- MongoDB高级查询详细
前言 前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客 MongoDB下载安装与简单增删改查 前 ...
- T-SQL高级查询语句
高级查询 1.连接查询,对结果集列的扩展select * from info select * from info,nation #形成笛卡尔积select * from info,nation wh ...
- SQL Server高级查询
简介 关于数据库,我们经常会听说"增查删改"之类的词语,听起来很简单,但是如果想要准确的获取到需要的数据的话,还是要花点功夫的.下面由我来和大家谈谈高级查询的用法以及和普通查询的区 ...
- 【solr】之solr界面查询返回距离并排序
使用solr界面查询 {!geofilt}距离函数 star:[4 TO 5]星级排序 geodist() desc 距离排序 pt :31.221717,121.580891 sfield:loca ...
- mongodb高级查询
前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客 MongoDB下载安装与简单增删改查 前奏:启 ...
随机推荐
- Microservice Anti-patterns
在最近的一次Microservices Practitioner Summit中,原Netflix工程师介绍了一种越来越常见的对Microservice的误用.简单地说,大家在搭建一个基于Micros ...
- 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...
- ASP.NET内置对象的总结
1. Response对象可形象的称之为响应对象,用于将数据从服务器发送回浏览器. 实例源码:链接: http://pan.baidu.com/s/1dDCKQ8x 密码: ihq0 2. Requ ...
- Go结构体实现类似成员函数机制
Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...
- 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议126~128)
建议126:适时选择不同的线程池来实现 Java的线程池实现从根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系 ...
- 微信小程序体验(1):携程酒店机票火车票
在 12 月 28 日微信公开课上,张小龙对微信小程序的形态进行了阐释,小程序有四个特定:无需安装.触手可及.用完即走.无需卸载. 由于携程这种订酒店.火车票和机票等工具性质非常强的服务,非常符合张小 ...
- 听H3絮叨:何以让天下没有难用的流程
最近朋友圈.网站新闻铺天盖地是"让天下没有难用的流程",有人就要问了,H3 BPM何德何能,为BPM站台,让天下没有难用的流程? 这是一个关于"办公室空想"的故 ...
- jQuery radio的取值与赋值
取值: $("input[name='radioName']:checked").val(); 赋值: $("input[name='radioName'][value= ...
- Oracle Standard Error 列表
今天,我特意从网上找了一些,以及自己平时总结的,关于错误编号和说明,平时我们在写项目的时候,往往是可能会出现下面这些错误,例如:违反唯一约束,无效的会话ID,等等.希望对大家有点帮助!可以看看,如果有 ...
- 机器指令翻译成 JavaScript —— 终极目标
上一篇,我们顺利将 6502 指令翻译成 C 代码,并演示了一个案例. 现在,我们来完成最后的目标 -- 转换成 JavaScript. 中间码输出 我们之所以选择 C,就是为了使用 LLVM.现在来 ...