1. 分面(Faceting)

  分面就是将搜索结果基于索引中的terms按类整理.搜索结果带有索引的term,没有term都带有该term匹配的文档数.分面使用户更容易探究搜索结果,缩小查询结果范围以达到更精确的搜索.

 1.1 General Parameters

  这里介绍了控制分面的基本参数:

    facet:设置为true,开启分面功能.如果设置为false,或者为空,或者缺失,关闭分面功能.默认值为空白.

    facet.query:指定一个任何符合Lucene语法的查询来生成一个分面计数.默认的solr的分面功能自动确定字段的唯一terms,然后对每一个term返回要给计数.在一个典型的分面查询中,你需要指定facet.query参数.这个参数对于数字范围分面或者基于前缀匹配分面还是比较有用的.

  可以多次使用facet.query参数,声明多个分面查询,用作分开的分面限制.

    facet.query={!myfunc}name~fred

1.2 Field-Value Faceting Parameters

  有几个参数可以用作触发基于字段中索引的terms.

  在使用这几个参数时,特别注意,term在Lucene中是一个特别的概念:它关联文字量的field/value对是发生分词分析之后索引的内容.对于文本字段包含词干提取,小写化,单词分解,这结果terms也许不是你所期望的,如果你想要solr对整个文字字符串表现为分析(用于搜索)和分面,在schema.xml中直接使用copyField,创建字段的两个版本,确保两个字段都是"indexed=true".下表总结了solr字段值的分面参数:

  1.2.1 facet.field:标志一个分面字段.遍历字段中的每要给term,然后对term计数.这个字段可以在查询的时候指定多次,用于多字段分面查询.

    注意:如果这个字段没有设置,下面的其他参数都没有作用.

  1.2.2 facet.prefix:限制分面的term,必须以指定的前缀符号开始.

  1.2.3 facet.sort:控制分面结果的排序.

    count:按照计数排序(从高到低)

    index:按照索引存储顺序(索引term的字母顺序).

    如果facet.limit大于0,默认按照count排序,否则按照index.

  1.2.4 facet.limit :控制对于每一个facet,返回多少条记录.

    负值表示不限制.默认为100.

  1.2.5 facet.offset : 分面结果偏移量 默认为0.每个字段均可设置.通过f.<fieldname>.facet.offset语法设置.

  1.2.6 facet.mincount : 指定分面字段要求的最小数量.如果分面字段的数量小于这个值,字段分面将不会返回.

    默认为0.通过参数 f.<fieldname>.facet.mincount可以指定每一个字段.

  1.2.7 facet.missing : 控制solr是否计算所有匹配结果的计数.这些匹配结果的字段没有值.除了基于term限制的facet字段.

    默认为false.为true的话,不计算字段没值的结果.通过参数 f.<fieldname>.facet.missing设置每一个字段.

  1.2.8 facet.method : 在对一个字段分面时,选择solr应该使用的算法或者方法.

    enum: 枚举字段中所有的terms.计算匹配查询和term的文档.这个参数推荐使用于分面多值字段,只有一些明显的值.每个文档中值的平均数没有什么关联.如使用U.S.国

           家的州分面,如Alabama,Alaska,...Wyoming.可能会导致使用50个缓存过滤器反复过滤.filterCache必须足够大以保留所有的缓存过滤器.

    fc:计算分面数,通过迭代匹配查询的文档,对每个文档总出现的terms求和.如果这个字段是多值或者分词字段,目前使用UnInvertedField来实现.使用环境:当字段的索引

      值的数量越高,但是每个文档的值的数量越低时,效果比较好.对于多值字段,一个混合的方法就是对terms使用filterCache缓存过滤器来匹配比较多的文档,参数fc代表

      字段缓存.

    fcs:单值字符串字段的段包含字段. 使用facet.method=fcs,和threads一起使用控制线程数量.这个参数允许在索引快速发生变化时,快速分面.

    默认字段是fc(除了BoolField字段类型).因为当一个字段有许多不同的term在索引中时,它倾向于使用更少的内存和更快的速度.这个参数可以通过

     f.<fieldname>.facet.method对每个字段设置.

  1.2.9 facet.enum.cache.minDF : 指定最小文档频率(匹配term的文档数),当确定term的限制数量时,应该使用filterCache.

    这个参数声明了最小文档频率(匹配term的文档数),使用filterCache缓存确定term的限制数量.只能和faceting. facet.method=enum一起使用.一个大于0的值将会较小filterCache的内存使用率,但是会增加查询处理的时间.如果你要对一个具有非常多的term的字段分面,你希望减小内存使用率,试着设置这个参数为25到50之间.然后进行一些测试,然后按照需要优化这个参数设置.

    默认值是0,对这个字段中的所有term使用filterCache.通过f.<fieldname>.facet.enum.cache.minDF对每个字段设置.

  1.2.10 facet.threads : 控制字段分面的并行处理.

1.3 Range Faceting

  对日期字段和数字字段支持范围分面.

  1.3.1 facet.range

    指定分面字段 facet.range=price&facet.range=age

  1.3.2 facet.range.start

    指定分面开始范围. f.<fieldname>.facet.range.start.如 f.price.facet.range.start=0.0&f.age.facet.range.start=10

  1.3.3 facet.range.end

    指定分面结束范围 .f.<fieldname>.facet.range.end.如 f.price.facet.range.end=1000.0&f.age.facet.range.end=99

  1.3.4 facet.range.gap

    指定范围跨度,作为一个值添加到最低范围.

    对于日期范围,应该使用 DateMathParser语法(如facet.range.gap=%2B1DAY ... '+1DAY').可以使用f.<fieldname>.facet.range.gap对每个字段指定参数:

    f.price.facet.range.gap=100&f.age.facet.range.gap=10

    gaps也可以是可变宽度的,使用逗号分割宽度列表.例如,在位置应用中,我们可能对距离分面为:walking(0-5km),driving(5-100km)或者其他的(100km+).如:

    facet.date.gap=1,2,3,10

  1.3.5 facet.range.hardend

    一个布尔参数,指定solr处理一个范围跳度,不能均匀的划分开始和结束值.如果为true,最后的范围限制将是facet.range.end作为上限值.默认为false.

  1.3.6 facet.range.include

    包含上限下限.

    lower:所有基于跳度的范围包含最低边界.

    upper:所有基于跳度的范围包含上限.

    edge:第一个和最后一个跳度范围包含它们的边缘界限.(第一个包含上限,最后一个包含下限).

    outer:The "before" and "after" ranges will be inclusive of their bounds, even if the first or last ranges already include those boundaries.

    all: Includes all options: lower, upper, edge, outer.

  1.3.7 facet.range.other  

 1.4 Date Faceting Parameters

    solr3.1之后,日期分面参数已经废弃,由range Faceting parameter代替使用

1.5 Local Parameters for Faceting

    本地参数允许覆盖全局设置.它能够提供一个添加元数据到其他参数值的方法.和XML属性非常像.

   1.5.1 Tagging and Excluding Filters

    标记和排除过滤器

    这个做多个选择分面时非常有效.

    假设对下面的查询进行分面:

      q=mainquery&fq=status:public&fq=doctype:pdf&facet=on&facet.field=doctype

    因为已经被过滤器fq=doctype:pdf限制,所以分面后的结果对于非 doctype:pdf的计数为0 .

    为了对doctype实现多选分面.GUI仍旧想要展示其他的doctype值和它们关联的计数.犹如fq=doctype:pdf参数没有使用一样:

=== Document Type ===
[ ] Word (42)
[x] PDF (96)
[ ] Excel(11)
[ ] HTML (63)

   q=mainquery&fq=status:public&fq={!tag=dt}doctype:pdf&facet=on&facet.field={!ex=dt}doctype

   过滤器排除支持所有分面的类型.tag和ex本地参数可以指定多个值,通过逗号分割.

   1.5.2 Changing the Output Key

    改变输出key值

    使用本地参数key,改变输出的名字.

    facet.field={!ex=dt key=mylabel}doctype

1.6 Pivot (Decision Tree) Faceting

  决策树分面.

  Pivoting是一个总结的工具,可以让你自动排序,计算,求存储在一个表中的总数和平均数.它会在显示汇总数据的第二个表中展示结果.Pivot分面使你跨多个文档的查询中创建结果汇总表.对于solr4,支持facet的嵌套查询,不仅仅是分面字段.

1.7 Facets and Time Zone

1.8 Related Topics

  SimpleFacetParameters from the Solr Wiki

1.7.5 Faceting的更多相关文章

  1. filters和scope在ElasticSearch Faceting模块的应用

    filters和scope在ElasticSearch Faceting模块的应用 使用ElasticSearch的Facet功能时,有一些关键点需要记住.首先,faceting的结果只会基于查询结果 ...

  2. 跟我一起ggplot2(1)

    ggplot2 R的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果. qplot 加载qplot library(ggplot2) # 测试数据集,ggplot2内置的钻石数据 qplot( ...

  3. ES 学习总结

    ES 总结: es 是基于lucene的, 是java 实现的, 很多概念和lucene是相同的 索引-- 对应数据库的表,mongoDB中的集合 文档,由字段组成, 一个字段可以出现多次. 字段,其 ...

  4. elasticsearch__5__java操作之FilterBuilders构建过滤器Query

    FilterBuilders构建过滤器Query 代码如下: package com.elasticsearch; import org.elasticsearch.action.ActionList ...

  5. 9个基于Java的搜索引擎框架

    在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广 ...

  6. ELK+Kafka集群日志分析系统

    ELK+Kafka集群分析系统部署 因为是自己本地写好的word文档复制进来的.格式有些出入还望体谅.如有错误请回复.谢谢! 一. 系统介绍 2 二. 版本说明 3 三. 服务部署 3 1) JDK部 ...

  7. Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

    上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...

  8. ES搜索引擎-简单入门

    基本概念: 索引Index es吧数据放到一个或者多个索引中,如果用关系型数据库模型对比,索引的地位与数据库实例(db)相当.索引存放和读取的基本单元是文档(document).es内部使用的是apa ...

  9. Solr搭建大数据查询平台

    参考文章:http://www.freebuf.com/articles/database/100423.html 对上面链接的补充: solr-5.5.0版本已被删除,新url:http://mir ...

随机推荐

  1. 2 weekend110的HDFS的JAVA客户端编写 + filesystem设计思想总结

    HDFS的JAVA客户端编写  现在,我们来玩玩,在linux系统里,玩eclipse 或者, 即,更改图标,成功 这个,别慌.重新换个版本就好,有错误出错是好事. http://www.eclips ...

  2. <转载>gcc/g++编译

    转载于:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/22/1782678.html 1. gcc/g++在执行编译工作的时候,总共需要4步 ...

  3. MFC如何添加系统消息处理函数?

    http://zhidao.baidu.com/question/318026804.html 在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成 ...

  4. 结构类模式(七):代理(Proxy)

    定义 为其他对象提供一种代理以控制对这个对象的访问. 代理模式也叫做委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模式本质上是在更特殊的场合采用了委托模式,而且在日常的应 ...

  5. mvc4帮助类

    @App @AppState @Ajax @Cache @Context @Culture @Html @IsPost @Layout @Model @Output @OutputStack @Pag ...

  6. Redis基本操作-20150608

    Redis基本操作-20150608 [http://my.oschina.net/u/241255/blog/206991]   Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存 ...

  7. Gson 和 Fastjson 你不知道的事

    背景 目前在公司负责的业务, 主要是跟JSON数据打交道, fastjson .gson都用, 他们适用于不同场景.fastjson号称是业界处理json效率最高的框架, 没有之一.但在某些场景下, ...

  8. ExtJs非Iframe框架加载页面实现

    在用Ext开发App应用时,一般的框架都是左边为菜单栏,中间为tab页方式的显示区域.而tab页面大多采用的嵌入一个iframe来显示内容.但是采用iframe方式有一个很大的弊端就是每次在加载一个新 ...

  9. java String和Date转换

    SimpleDateFormat函数语法:    G 年代标志符  y 年  M 月  d 日  h 时 在上午或下午 (1~12)  H 时 在一天中 (0~23)  m 分  s 秒  S 毫秒  ...

  10. ARM&Linux 下驱动开发第三节

    后台驱动代码如下:比较昨天的,添加了读写指针位置移动操作 #include<linux/init.h> #include<linux/module.h> #include< ...