zoukankan      html  css  js  c++  java
  • solr研磨之facet

    作者:战斗民族就是干

    转载请注明地址:http://www.cnblogs.com/prayers/p/8822417.html

    Facet  

    开门见山,facet解决的就是筛选,我是把它理解为一种聚合。

      例如,商品属性中的品牌名称。例如:搜索召回了100个sku,这100个sku里面包含在20个品牌里面,那我如何聚合出这20个品牌呢?solr给我们提供了强大的API,facet,基本用例如下

    http://localhost:8080/solr/b2b/select?q=*:*&wt=json&indent=true&facet=true&facet.field=brandName

      这里需要注意的是:如果brandName配置了分词器,facet的结果是对域的域值分词后得到的每一个唯一的词进行分组统计。

      facet不仅仅可以支持单值域的分组统计,还支持多值域,文本域,嵌入式facet的统计。需要注意的是:在进行文本域的facet的时候大量的噪音词会影响你返回的结果,这时候需要对文本域配置停用词过滤器

      还有一种情况,比如说品牌名称,我既需要查询做分词处理,又需要进行facet统计。但是分词后facet的结果并不是我想要的,我想要的是不做分词处理的facet的结果。这个时候我们可以使用复制域CopyField,将品牌名称作为一个新域,并且是域的类型是StringFilter。copyField使用用例如下:  

    <copyField  source="brandName"  dest="copyBrandName"  maxChars="30000" />

    source:需要拷贝的域名称

    dest:被拷贝的域名称

    maxChars:限制复制的字符数

      单个域的facet用例如下  

    http://localhost:8080/solr/b2b/select?q=*:*&wt=json&indent=true&facet=true&facet.field=brandName

      多个域的facet用例如下  

    http://localhost:8080/solr/b2b/select?q=*:*&wt=json&indent=true&facet=true&facet.pivot=brandCode,brandName

      区间facet

    http://localhost:8080/solr/b2b/select?q=*%3A*&wt=json&indent=true&facet=true&facet.range=price&facet.range.gap=10&facet.range.start=0&facet.range.end=10000

      facet.range:表示对那个域执行facet区间查询,facet.range.start表示区间的上限值,facet.range.end表示区间的下限值,facet.range.gap:参数按照每个区间分布多少个值进行自动区间划分

  • 相关阅读:
    合并一个二维数组中相同项,其他数量则相加
    清除空值
    数组的一维下标换为指定的key值
    二维数组排序
    word输出
    解决Zend加密的PHP页面出现Fatal error: Incompatible file format: The encoded file has format major ID 1, whereas the Loader expects 4 in
    nginx反向代理substitutions4nginx模块实现替换字符盗站 nginx.conf配置
    ubuntu 编译安装nginx 并添加substitutions4nginx模块
    windows 2008 R2 wincache 不稳定
    php5.5及php5.6 wincache无法启用问题
  • 原文地址:https://www.cnblogs.com/prayers/p/8822417.html
Copyright © 2011-2022 走看看