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. 创建.htaccess文件
  2. HTMl5-canvas 入门级复习
  3. [MySQL] 忘记root账户密码怎么办
  4. magento中的ajax
  5. bzoj3983
  6. 使用buildbot实现持续集成(转载)
  7. C#全屏随机位置显示图片的小程序
  8. Aspose.Words组件介绍及使用—基本介绍与DOM概述
  9. list-style-type 去除li 前面的标记(小黑点)
  10. FZU 1063 三维扫描
  11. sql语句基本查询操作
  12. CentOS配置教程
  13. go语言学习--map类型的切片
  14. Sqoop增量导入
  15. 大数据中Hadoop集群搭建与配置
  16. sed: 1: “…”: invalid command code on Mac OS
  17. HIVE—数据仓库
  18. Xcode的插件的路径
  19. IOS开发之自定义键盘
  20. STL 源码分析 (SGI版本, 侯捷著)

热门文章

  1. Unity3D Keynote
  2. JAVA应用apache httpclient探测http服务
  3. Java沙箱技术
  4. iOS 8自动调整UITableView和UICollectionView布局
  5. Xcode——创建你自己的Framework
  6. 那些不被关注但很重要的html标签
  7. Mahout之深入navie Bayesian classifier理论
  8. android Intent的startActivityForResult()方法
  9. 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证-2.2身份验证开发]
  10. 当类库项目中无法使用Application.StartupPath