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. [转载]JAVA获取word表格中数据的方案

    上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...

  2. 004——VUE中的v-once的使用

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 解决通用串行总线(USB)控制器有感叹号

    (转自:http://blog.sina.com.cn/s/blog_44190ce10101ejth.html)   通用串行总线控制器:由于其配置信息(注册表中的)不完整或已损坏,Windows ...

  4. C#学习历程(一)[基础概念]

    #小摘要 >> boolean和bool差不多是一个东西,但是bool是一个基本值的类型,boolean则是对象(java与javascript中有用). Bool是Boolean的别名. ...

  5. 初识CSS(1)

    1.css的语法 a.位置 <head> <style type="text/css"> //css代码 </style> </head& ...

  6. OLE剪切板与拖拽

    https://www.xuebuyuan.com/1074399.html https://blog.csdn.net/uda1985/article/details/6179801

  7. 《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象

    3.2.1 什么是KIE KIE(Knowledge Is Everything),知识就是一切的简称.JBoss一系列项目的总称,在<Drools使用概述>章节已经介绍了KIE包含的大部 ...

  8. 从无到有开发自己的Wordpress博客主题---Wordpress主题的构造

    在这篇教程中,主要是对Wordpress的主题的构造进行分析,以方便今后的开发工作. 本来打算就引用一下别人已经有的文档就好了,但还是想从头到尾捋一遍,也方便自己梳理学习. 1.Wordpress主题 ...

  9. linux中文件或者文件夹的基本操作(复制,移动,删除,查找,压缩)

    linux 文件(文件夹)的创建,复制,移动,重命名,删除基本命令 复制文件或整个目录 cp 源文件名 目标文件夹/[目标文件名]cp -rv 源文件夹 目标文件夹/[目标文件夹名] --r 递归目录 ...

  10. c++11新特性之宽窄字符转换

    C++11增加了unicode字面量的支持,可以通过L来定义宽字符:str::wstring str = L"中国人": 将宽字符转换为窄字符串需要用到codecvt库中的std: ...