一、什么是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的更多相关文章

  1. Solr的学习使用之(七)Solr高级查询facet、facet.pivot简介

    以下转载自:http://hongweiyi.com/2013/03/apache-solr-facet-introduction/ 1.什么是Faceted Search Facet['fæsɪt] ...

  2. Solr聚合查询

    1  分组查询 概述:Solr常用的分组查询有两种,Facet分组和Group分组,分别以下列出这两种查询:   1.1     Facet分组 solr种以导航为目的的查询结果成为facet,在用户 ...

  3. 【转】Solr客户端查询参数总结

    今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...

  4. Solr 排除查询

    前言 solr排除查询也就是我们在数据库和程序中经常处理的不等于,solr的语法是在定语前加[-].. StringBuilder sbHtml=new StringBuilder(); shBhtm ...

  5. MongoDB高级查询详细

    前言 前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客  MongoDB下载安装与简单增删改查 前 ...

  6. T-SQL高级查询语句

    高级查询 1.连接查询,对结果集列的扩展select * from info select * from info,nation #形成笛卡尔积select * from info,nation wh ...

  7. SQL Server高级查询

    简介 关于数据库,我们经常会听说"增查删改"之类的词语,听起来很简单,但是如果想要准确的获取到需要的数据的话,还是要花点功夫的.下面由我来和大家谈谈高级查询的用法以及和普通查询的区 ...

  8. 【solr】之solr界面查询返回距离并排序

    使用solr界面查询 {!geofilt}距离函数 star:[4 TO 5]星级排序 geodist() desc 距离排序 pt :31.221717,121.580891 sfield:loca ...

  9. mongodb高级查询

    前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客  MongoDB下载安装与简单增删改查 前奏:启 ...

随机推荐

  1. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  2. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  3. angular2系列教程(七)Injectable、Promise、Interface、使用服务

    今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...

  4. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. 设计模式之创建类模式大PK

                                        创建类模式大PK 创建类模式包括工厂方法模式.建造者模式.抽象工厂模式.单例模式和原型模式,他们能够提供对象的创建和管理职责.其 ...

  6. 2Sum

    用哈希表(unordered_map)使得时间复杂度从O(n*n)降到O(n),空间复杂度从O(1)增到O(n):一边找一边插入哈希表 注意 在C++11以前要使用unordered_map需要 #i ...

  7. 电信计费业务:预后融合OCS到底应该实扣还是虚扣?

    引入OCS的初衷之一是为了让计费系统能够参与到用户的通讯控制中来,也就是所谓的实时信控.用户在没有余额时,通讯就会被停止,不会造成"天价欠费 ",一方面保障用户的利益,一方面也保障 ...

  8. 满堂红CIO邓劲翔:房屋中介突围

    人脸识别.客户关系管理进度监控.业务流程实时监控.网站访问人数及流量实时监控等实际企业应用场景淋漓尽致.羽羽如生的以大屏幕上图表形式展现在人们面前,如果你不去继续询问,你不会知道这是一家才刚刚在房地产 ...

  9. OpenSUSE下编译安装OpenFoam

    在不是Ubuntu系统下安装OpenFoam,需要采用编译安装的方式.以下以OpenSuSE为例进行编译安装. 1 软件包准备 需要下载两个程序包: OpenFOAM-4.x-version-4.1. ...

  10. 怎样编写高质量的java代码

    代码质量概述     怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍.也请有过代码质量相关经验的朋友 ...