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="6" start="0">...</result>
    <lst name="facet_counts">
        <lst name="facet_queries" />
        <lst name="facet_fields">
            <lst name="品牌">
                <int name="大众">1</int>
                <int name="奥迪">1</int>
                <int name="宝马">1</int>
            </lst>
            <lst name="车系">
                <int name="POLO">1</int>
                <int name="迈腾">1</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+3]
&facet.query=price:[3.01+TO+5]
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="6" start="0">...</result>
    <lst name="facet_counts">
        <lst name="facet_queries">
               <int name="price:[*+TO+3]">1</int>
           <int name="price:[3.01+5]">1</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">0</int>
<int name="2010-11-15T00:00:00Z">0</int>
<int name="2010-11-22T00:00:00Z">0</int>
<int name="2010-11-29T00:00:00Z">2</int>
<int name="2010-12-06T00:00:00Z">2</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

时间: 2024-10-10 19:46:15

Solr高级查询Facet的相关文章

Solr聚合查询

1  分组查询 概述:Solr常用的分组查询有两种,Facet分组和Group分组,分别以下列出这两种查询: 1.1     Facet分组 solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索, Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计. Solr Fact提供了4种类型的Fact <lstname="facet_co

指尖上的电商---(9).net开发Solr中的Facet功能

上一节中我们演示了在SolrAdmin中使用Facet功能来进行分组统计,这一节我们看看怎样使用.NET开发Solr中的Facet功能.在讲Facet功能的同时, 我们看下.Net中怎样使用Solr查询.使用的客户端工具是easysorl.net,大家可以去codeplex下载.这个工具很好用. 看如下图,下图就是我们要演示的功能   1.模糊查询 模糊查询就是搜索指定的汉字得到一个结果.下面的示例就是查询商品名称中包含白色的所有商品,最终得到的结果如下图 代码 public void Quer

[Hibernate Search] (5) 高级查询 - 过滤,投影和分面

高级查询 在介绍了更多的高级映射功能之后,是时候回顾一下之前介绍过的查询功能了,看看如何借助这些高级的映射功能来使用一些高级的查询功能.本文会通过以下几个方面进行介绍: 如何在不和数据库进行任何交互的前提下,借助Lucene的力量来动态的筛选结果 如何通过使用基于投影(Projection)的查询来获取需要的属性,从而避免与数据库的交互 如何使用分面搜索(Faceted Search)对搜索结果进行划分 如何使用查询时提升(Boosting) 如何给查询设置时间限制 过滤(Filtering)

数据库——基础(数据库操作,表格操作)——增加高级查询

笔记 LAMP:Linx(操作系统) A(阿帕奇)——网页的应用程序 M(Mysql):体积小,应用简单 P(PHP) 第一步:搭建网页环境——A\M\P WAMP:用WAMP搭建环境 DW:更好的显示 数据库的基本操作: 数据库——表结构——字段(列) 每一行数据成为一条数据(记录) 特点:关系型数据库,有严格的规范 1.必须有主键:能够唯一标识一条数据的字段 2 T-SQL:通用的数据库操作语句 自增长列code(主键列) ;连接键表 最后一个字段不加 ,#注释 创建表:create tab

MYSQL中的多类型查询及高级查询操作

离散查询select * from car where price=30 or price=40 or price=50 or price=60;select * from car where price in(30,40,50,60)取出数据select * from car where price not in(30,40,50,60)去掉数据 聚合函数(统计查询)select count(*) from carselect count(code) from car #取所有的数据条数sel

Linq高级查询与分页查询

Linq高级查询 以~开头: r=>r.Name.StartsWith("李"); 以~结尾: r=>r.Name.EndsWith("光"); 包含(模糊查询): r=>r.Name.Contains("四"); 数据总个数: Con.Goods.Count();||Con.Users.ToList().count; 最大值: Con.Goods.ToList().Max(r=>r.Price); 最小值: Con.Go

数据库的高级查询

高级查询 1.连接查询(对列的扩展) 第一种形式:select * from Info,Nation #会形成笛卡尔积select * from Info,Nation where Info.Nation = Nation.Code #加上筛选条件 select Info.Code,Info.Name,Sex,Nation.Name,Birthday from Info,Nation where Info.Nation = Nation.Code#查询指定列 select Info.Code a

数据库---查询语句(三):高级查询

高级查询 一.多表连接(连接的是两个表中的列) 1.select * from Info,Nation where Info.Nation=Nation.Code select  Info.Code,Info.Name,Nation.Name  from Info ,Nation where Info.Nation=Nation.Code    //where 后面是一个外键关系 select * from Info      出现的现象,形成的表叫做笛卡尔积 2. join 连接 select

mysql 高级查询

高级查询:1.连接查询select * from Info,Nation #这是两个表名,中间用逗号隔开形成笛卡尔积select * from Info,Nation where Info.nation=Nation.code select Info.code,Info.name,Info.sex,Nation.name as '民族',Info.birthday from Info,Nation where Info.nation=Nation.code select * from Info