Facet 介绍

 
Facet 是 solr 的高级搜索功能之一 ,可以给用户提供更友好的搜索体验,在搜索关键字的同时 , 能够按照 Facet 的字段进行分组并统计。
       比如你上淘宝,输入“笔记本”进行搜索,就会出现品牌分类,价格范围等分类,这个就叫facet了。这个例子也许不是那么准确的描述facet,不过基本上就是这个意思。对输入关键字后搜索出来的结果再进行分类。
       solr有几种facet: 
      普通facet,比如从厂商品牌的维度建立fact 。
      查询facet,比如根据价格查询时,将根据价格,设置多个区间,比如0-10, 10-20, 20-30等。
      日期facet, 也是一种特殊的范围查询,比如按照月份进行facet。
 
 

 
 进行Facet查询需要在请求参数中加入“facet=on”或“facet=true”只有这样Facet组件才起作用。
1. Field Facet
       Facet字段通过在请求中加入“facet.field”参数加以声明,如果需要对多个字段进行Facet查询,那么将该参数声明多次.比如
http://localhost:8081/solr/select?q=联想&facet=on&facet.field=cpu&facet.field=videoCard
       各个Facet字段互不影响,且可以针对每个Facet字段设置查询参数.以下介绍的参数既可以应用于所有的Facet字段,也可以应用于每个单独的Facet字段.应用于单独的字段时通过 f.字段名.参数名=参数值,这种方式调用。比如facet.prefix参数应用于cpu字段,可以采用如下形式
f.cpu.facet.prefix=Intel
package Facet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.FacetField.Count;
import org.apache.solr.client.solrj.response.QueryResponse;
public class SolrFacet {
public static void addIndex(){
HttpSolrClient server = solrServer.getServer();
List<ProductBO> list = new ArrayList<>();
ProductBO bo1 = new ProductBO();
bo1.setId("1001");
bo1.setTitle("27寸曲面显示器");
bo1.setMajor_s("电器");
bo1.setSubMajor_s("显示器");
bo1.setBrand_s("海尔儿");
bo1.setPrice_i(5000);
list.add(bo1);
bo1 = new ProductBO();
bo1.setId("1002");
bo1.setTitle("无敌28寸曲面显示器");
bo1.setMajor_s("无敌电器");
bo1.setSubMajor_s("无敌显示器");
bo1.setBrand_s("无敌海尔儿");
bo1.setPrice_i(6000);
list.add(bo1);
bo1 = new ProductBO();
bo1.setId("1003");
bo1.setTitle("超级28寸曲面显示器");
bo1.setMajor_s("超级电器");
bo1.setSubMajor_s("超级显示器");
bo1.setBrand_s("超级海尔儿");
bo1.setPrice_i(7000);
list.add(bo1);
bo1 = new ProductBO();
bo1.setId("1004");
bo1.setTitle("28寸曲面显示器");
bo1.setMajor_s("电器");
bo1.setSubMajor_s("显示器");
bo1.setBrand_s("海尔儿");
bo1.setPrice_i(7000);
list.add(bo1);
try {
server.addBeans(list);
server.commit();
} catch (SolrServerException | IOException e) {
e.printStackTrace();
}
} public static void facetQuery(){
HttpSolrClient server = solrServer.getServer();
SolrQuery query = new SolrQuery(); String para = "*:*";
query.setFacet(true);
query.addFacetField(new String[]{"subMajor_s","brand_s"});
query.setFacetLimit(100);//限制facet返回数量
query.setFacetMissing(false);//不统计null的值
query.setFacetMinCount(1);//分组的数据最小为1
query.addFacetQuery("price_i:[5000 TO 6000]");
query.setQuery(para);
QueryResponse queryResponse;
try {
queryResponse = server.query(query);
List<FacetField> list = queryResponse.getFacetFields();
for(FacetField f : list){
System.out.println(f.getName());
System.out.println("-------------------");
List<Count> values = f.getValues();
for(Count c : values){
System.out.println(c.getName() + ":" + c.getCount());
}
System.out.println("===================");
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
//addIndex();
facetQuery();
}
}
结果:
subMajor_s
-------------------
显示器:2
无敌显示器:1
超级显示器:1
===================
brand_s
-------------------
海尔儿:2
无敌海尔儿:1
超级海尔儿:1

===================

 
 
 
 
 
 

7.solr学习速成之facet的更多相关文章

  1. 10.solr学习速成之高亮显示

    Solr高亮显示的三种实现 高亮显示在搜索中使用的比较多,比较常用的有三种使用方式,如果要对某field做高亮显示,必须对该field设置stored=true .          第一种是普通的高 ...

  2. 9.solr学习速成之group

    Group与Facet的区别  facet的查询结果主要是分组信息:有什么分组,每个分组包括多少记录:但是分组中有哪些数据是不可知道的,只有进一步搜索.        group则类似于关系数据库的g ...

  3. 8.solr学习速成之FacetPivot

    什么是Facet.pivot  Facet.pivot就是按照多个维度进行分组查询,是Facet的加强,在实际运用中经常用到,一个典型的例子就是商品目录树 NamedList解释: NamedList ...

  4. 1.solr学习速成之配置文件

    什么是solr Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过H ...

  5. 2.solr学习速成之安装

    1.下载解压solr-5.3.1.tgz [root@205 opt]# tar -zxf solr-5.3.1.tgz -C /opt/module/ 2.将solr-5.3.1/server/so ...

  6. 13.solr学习速成之IK分词器

    IKAnalyzer简介 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包. IKAnalyzer特性 a. 算法采用“正向迭代最细粒度切分算法”,支持细粒度和最大词长两 ...

  7. 12.solr学习速成之dataimport

    solr除了利用solrj建立索引外,还可以由列式数据库hbase触发器添加索引,自动全量或者增量索引关系数据库数据等. dataimport可以配置从任何关系数据库导入索引 1.将jar包拷贝到to ...

  8. 11.solr学习速成之MoreLikeThis

    Solr相似匹配    在网页搜索或电商产品搜索结果页面,很多时候会看到一个相似文档.相似产品或找相似的链接.Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeT ...

  9. 6.solr学习速成之multicore查询

    查询关联多个core 再新建一个core 向每个core添加索引,修改 final static String SOLR_URL = "http://localhost:8080/solr/ ...

随机推荐

  1. VMware 虚拟镜像转 Hyper-V(Win10/2016)

    VMware 虚拟镜像转 Hyper-V(Win10/2016) 参考:http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyp ...

  2. 在web.xml中配置spring配置文件的路径

    <context-param>     <param-name>contextConfigLocation</param-name>     <param-v ...

  3. Workflow Builder 2.6.3 Certified on Windows 10 for EBS 12.x

    By Steven Chan - EBS-Oracle on May 17, 2016 Workflow Builder 2.6.3 is now certified on Windows 10 de ...

  4. YCSB benchmark测试mongodb性能——和web服务器测试性能结果类似

    转自:http://blog.sina.com.cn/s/blog_48c95a190102v9kg.html         YCSB(Yahoo! Cloud Serving Benchmark) ...

  5. 【Hive】数据去重

    实现数据去重有两种方式 :distinct 和 group by 1.distinct消除重复行 distinct支持单列.多列的去重方式. 单列去重的方式简明易懂,即相同值只保留1个. 多列的去重则 ...

  6. Django的 CBV和FBV

    FBV CBV 回顾多重继承和Mixin 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以 ...

  7. 简单使用JDOM解析XML

    原文:http://liuwentao.iteye.com/blog/59978 使用JDOM解析XML一.前言JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创 ...

  8. L140

    一本载有许多时装照片的杂志是用带有光泽的优质纸印制的.A glossy magazine has lots of pictures of fashionable clothes and is prin ...

  9. mac root

    我在mac下,用su登录root用户 但是提醒 su:Sorry   然后按照网上的方法弄了好多次,都没成功,说是要修改/etc/group 文件中,wheel后添加自己的用户名,用逗号分隔多个用户, ...

  10. 实战JAVA 高并发设计

    一.同步(Synchronous)和异步(Asynchronous) 同步和异步通常用来形容一次方法调用,同步方法,调用者必须等到方法调用返回后,才能继续后续的行为,异步方法调用会立即返回,调用者就可 ...