纲要

  • Facet概述
    • 使用场景
    • 快速上手
      • 将facetComponent加入请求处理链
      • 字段索引
      • 小试牛刀
    • Facet基础
      • 常用参数
      • facet query/range/interval
        • facet.query
        • facet.range
        • facet.interval
    • 小Tips
    • 小结
    • 参考

Facet概述

Facet(直译为分面,实践来看可以叫做聚合)是由facet component支持的,将查询结果根据指定条件进行动态聚合,获得各类目信息的功能。

使用场景

最常见的一个例子是购物导航栏,如下图。在搜索“电脑”一词时,我们除了获得搜索结果,还会看到最上方的导航栏,它告诉我们关键词带有“电脑”的商品,分了几大类,每一类下面各有多少商品。
这就是facet功能的一个最基础的应用。这个好处是能引导用户逐步缩小搜索结果范围,最终找到自己想要的结果。

另一个场景是在筛选栏中替代传统的静态列表。如下图,选择行政区后,会下拉展开行政区下面的商圈。但与传统下拉列表不同的是,这里不会展示该区域下的所有商圈,只会展示有结果的商圈,避免用户的无效点击。这也是facet的功劳。

快速上手

想要在solr中使用这一功能,只需要简单的三步:

  1. 确认facetComponent加入请求处理链(SearchHandler默认有)
  2. 把要聚合的字段设置为可索引,或为此字段构建docValues正向索引
  3. 请求时增加facet=on&facet.field=field参数

将facetComponent加入请求处理链

Facet功能由facet组件提供支持,我们要确保在进行请求处理时能够调用这个组件。我们在solrconfig.xml中看到这样一段话:

<!-- Search ComponentsSearch components are registered to SolrCore and used by instances of SearchHandler (which can access them by name)By default, the following components are available:<searchComponent name="query"     class="solr.QueryComponent" /><searchComponent name="facet"     class="solr.FacetComponent" /><searchComponent name="highlight" class="solr.HighlightComponent" /><searchComponent name="stats"     class="solr.StatsComponent" /><searchComponent name="debug"     class="solr.DebugComponent" />Default configuration in a requestHandler would look like:<arr name="components"><str>query</str><str>facet</str><str>mlt</str><str>highlight</str><str>stats</str><str>debug</str></arr>
-->

可见只要我们使用默认的searchHandler,而且不对component进行个性化设定,那么请求会被query、facet、mlt、highlight、stats、debug组件逐步处理。
如果使用自定义的Handler,或者覆写了componet列表,就需要注意加入facet component来支持聚合操作,否则该功能不生效。

字段索引

在前面筛选栏的例子,我们要知道哪些商圈有这个商品,假设商品的“商圈”字段名为commertial_district,那么需要indexd="true"或者docValues=“true”。
如果对未索引的字段进行facet,则获得结果为空,但也不会报错

小试牛刀

http://localhost:7070/solr/test/search?q=*:*&rows=0&facet=on&facet.field=prescription_type

这是最简单的使用,按指定字段值进行分组统计。可以看到除了docs之外,还返回了facet_count,所有和facet相关的结果都在这个key下。

Facet基础

常用参数

根据经验,以下参数能满足最基础的按值计数查询。
详情查询 Solr Ref Guide 6.6 Facet

参数 功能 默认值
facet.field 指定需要分面的字段
facet.limit 限制facet结果数目 100
facet.sort 排序方式,可以是count(个数从高到低)或index(字典顺序) count
facet.mincount facet 字段某值的计数小于此值,则不返回此值 0
facet.method 指定使用的算法enum/fc/fcs/uif fc
facet.prefix 指定字符串开头的词项来限制分面值,常用于自动补全功能
facet.missing 是否返回不含值的文档计数 False

facet query/range/interval

除了最常用的facet.field,在实际中还可能用到facet.queryfacet.rangefacet.interval

facet.query

  • 使用facet.query灵活指定查询,统计符合指定查询的doc数。
  • 可在同一查询中指定不同类型的facet query类型,如下图,一个为范围查询,一个为枚举查询。
  • docs中的文档数仅受fq参数影响,facet.query不影响这里。

facet.range

如果说facet.query是最灵活的用法,那么facet.range则是为间距(gap)固定的范围查询量身定制的方法。下图中一目了然:

facet.interval

facet.range的缺憾是每个组的范围是一样的,不太灵活,facet.interval则弥补了这个不足。

  • 使用小括号和中括号控制开闭区间

小Tips

  • 对多值字段进行按值计数时,同一个doc中的不同值会分别计数一次,facet结果中各项之和可能会大于总doc数,这是正常的;
  • 对分词类型字段进行按值统计时,会根据分词后的结果词来计算:

小结

facet只是查询中的一个环节,可讲的内容却不少,随便一写,文章也不短了。
作为基础,这一篇差不多够了,请期待下集!

参考

  1. 《solr in action》
  2. facet: https://lucene.apache.org/solr/guide/6_6/faceting.html

初识solr facet(一)相关推荐

  1. Solr -- Solr Facet 1

    一.Facet介绍 solr facet 是solr搜索的一大特色,facet不好翻译,有说是垂直搜索,有说是分片搜索,但都不是很好,还是懒得翻译了,就叫facet ,具体功能看下面的例子意会吧. 比 ...

  2. Solr Facet 查询

    为什么80%的码农都做不了架构师?>>>    Solr Facet查询 转载请出自出处:http://eksliang.iteye.com/blog/2165882 一)概述 Fa ...

  3. Solr Facet(分片)

    2019独角兽企业重金招聘Python工程师标准>>> 在schema文件设置字段的type类型是string,不分词,只能被整个搜索.facet的该字段可以整个展示,就像淘宝的搜索 ...

  4. Solr Facet技术的应用与研究

    问题背景 在<搜索引擎关键字智能提示的一种实现>一文中介绍过,美团的CRM系统负责管理销售人员的门店(POI)和项目(DEAL)信息,提供统一的检索功能,其索引层采用的是SolrCloud ...

  5. Solr -- Solr Facet 2

    solr将以导航为目的的查询结果称为facet. 它并不会修改查询结果信息, 只是在查询结果上根据分类添加了count信息, 然后用户根据count信息做进一步的查询, 比如淘宝的查询列表中, 上面会 ...

  6. 搜索引擎 Solr 简介

    1.前言 企业站内搜索技术选型 在一些大型门户网站.电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快.搜索结果按相关度排序.搜索内容格式 ...

  7. 自译Solr in action中文版

    文件夹 Part 1 初识 SOLR 1 Solr 简单介绍 2 開始熟悉 Solr 3 Solr 核心概念 4 配置 Solr 5 建立索引 6 文本分析 Part 2 Solr 核心功能 7 发起 ...

  8. Solr in Action 翻译完成情况

    Solr in action读书笔记章节分布 第一篇 初识Solr 第1章 Solr简介  已完成 第2章 了解Solr   待整理 第3章 Solr关键概念 第4章 Solr配置 第5章 索引 第6 ...

  9. 理解Lucene/Solr的缓存

    缓存对于提高搜索引擎的吞吐量,降低CPU占用率极为重要.Lucene/Solr在这块做了很多的工作.Lucene/Solr中默认提供了5种缓存,同时solr还提供扩展缓存接口,允许开发者自定义缓存. ...

  10. Lucene / Solr 开发经验

    Lucene / Solr 开发经验 http://clayz.iteye.com/blog/240357 2008-09-10 Lucene / Solr 开发经验 博客分类:Framework S ...

最新文章

  1. 揭秘微信「看一看」如何精准挖掘你感兴趣的内容
  2. python ico_Python协程asynico模块解读
  3. CF321E Ciel and Gondolas BZOJ 5311 贞鱼
  4. [JZOJ P1327] [DP]订货
  5. 西门子S7-1200控制伺服/步进电机方法与接线(全)
  6. python数据结构之递归
  7. MapReduce----并行支持向量机(PSVM)第二部分之原始对偶内点法
  8. 树莓派 opencv 调用摄像头
  9. 前端培训,达内黑马、丁鹿学堂、北大青鸟?
  10. 转载-卷影复制服务(VSS)详细介绍
  11. C++用cmath求平方根和次方
  12. 大数据可视化工程师岗位要求包括哪些?
  13. A Survey on Conversational Recommender Systems
  14. C++: 猴子选大王
  15. 部署harbor服务器(https/http)
  16. python统计元音字母个数_计算Python中的元音(Counting vowels in python)
  17. ehcache磁盘缓存说明
  18. 645271530卖外汇CRM的骗子QQ
  19. 计算机毕业设计Python+uniapp+安卓运动健康app(WEB+APP+LW)
  20. 数值模拟实时三维可视化的C#与OpenGL实现

热门文章

  1. Windowed functions can only appear in the SELECT or ORDER BY clauses
  2. atan java_Java Math atan() 使用方法及示例
  3. 新猿木子李:0基础学python培训教程 Python操作Excel之格式转换
  4. 螺旋扩孔的效率高,但侧壁质量不如步进扩孔
  5. html中%3ch3%3e有颜色吗,typo.html
  6. MYSQL建表时PK,NN,UQ,BIN,UN,ZF,AI字段标识的意义
  7. app开发入门篇-近期uniapp ; 封装request
  8. Transformer课程 业务对话机器人Rasa 3.x Reaching Out to the User
  9. NOIP模拟赛20191024 T1 嘟嘟噜【约瑟夫问题的mlogn解法】
  10. 想晋升Android架构师——学习这些核心技术够用吗?