纲要

  • 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. 360 您访问的是存在未经证实信息的网站
  2. Spring学习----IoC容器创建对象
  3. Hadoop学习总结
  4. 【OpenCV】8邻域种子填充法剔除短连通域的高效算法
  5. 第八章 PX4-SDlog解析
  6. 某谷 P1654 OSU!
  7. html+dom+深入,DOM 深入学习 - 1
  8. 含有运算放大器的电阻电路
  9. echarts 地图常见效果
  10. #if defined和#if !defined的含义
  11. 2. jQuery 语法
  12. 计算机应用和轨道交通哪个好,轻轨学校对重庆和男生有什么好处
  13. idm integration module(idm) Chrome插件 安装
  14. Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置
  15. oracle教程课件,Oracle入门教程(PPT课件)
  16. 十二、适配器模式——解决充电的烦恼 #和设计模式一起旅行#
  17. C++我记得应该是当初笔试面试常考的
  18. 消防设施操作员考试真题、模拟练习题库(6)
  19. 杰理之出现电压检测、ADC 检测不准【篇】
  20. 先下手为强 Google桌面搜索出炉

热门文章

  1. python 协程加多线程下载asyncio、ThreadPoolExecutor
  2. keepalived配置虚拟ip无法ping通解决方法
  3. LED显示屏工程招标常见控标十八绝招!
  4. mysql5.7架设征途服务器_征途手工架设服务端+配套双客户端+架设流程
  5. 成人python线上培训机构_哪些成年人正通过在线教育平台学习?看这个大数据报告就知道...
  6. php精华之独孤九剑
  7. C# 中的委托和事件(详解)
  8. linux的帮助,帮助信息_Linux公社 - Linux系统门户网站
  9. python安装结巴_python jieba(结巴)小模块精讲
  10. Premiere Pro CC 2018 经典教程