• 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:参数按照每个区间分布多少个值进行自动区间划分

  • 相关阅读:
    Markdown语法
    BASH 特性和快捷键
    jstl标注标签库
    搭建以太坊私网
    spring-装配bean
    java语法糖
    centos7 安装jdk、Tomcat
    合约实战,代币合约,DAPP开发
    solidity数据类型
    solidity合约面向对象
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/9510908.html
Copyright © 2020-2023  润新知