solr分面搜索尝试

作者: cathy1997 | 来源:发表于2018-06-19 00:15 被阅读165次
  • 使用场景:基于索引词(terms)将搜索结果安排到类别(categories)中,通过缩小搜索结果在搜索期间提供更好的用户体验。
  • 分面搜索的输出:为每个搜索项找到的数字计数。
  • 分面的字段属性:indexed或docValues之一必须为true,但不是都必须为true。

1.facet的一般参数

facet - "true" 启用faceting计数;"false"或blank或missing value,不启用faceting,默认值是blank。
facet.query - 可以指定Lucene语法形式的任意query来生成faceting计数。使用facet.query来覆盖默认检查字段,并精确指定你希望计数的词或正则式,可以指定多个facet.query参数。
例如直接修改URL:http://主机名:8983/solr/mycollection/select?facet.query=creation_date:清代&facet=on&q=title:犬),则会显示该字段下的分面数据数量。

2.分面的类型

2.1字段分面(Field-value Faceting)

  • facet.field - 指定分面字段,可多次指定。至少指定一个,其他参数才有效果。
    例如查询subject_matter字段的所有分面数据的URL:http://主机名:8983/solr/mycollection/select?facet.field=subject_matter&facet=on&q=*:*
分面结果
  • facet.prefix - 限制分面term为指定前缀。按字段指定参数:f.<fieldname>.facet.prefix
  • facet.sort - count 按计数排序,最高的在前。index 按字符顺序。
  • facet.limit - 默认值为100, 负值表示不限.
  • facet.missing - 如果设置为true, 会返回匹配查询但没有facet的所有结果的计数。默认为false.

2.2范围分面(Range Faceting)

可以在支持范围查询的日期或数字字段上使用范围构面。此功能有助于通过对范围中的参考字段进行分块来提供更好的用户体验。

  • facet.range - 按范围指定要分面的字段。例如指定价格和年龄:facet.range=price&facet.range=age
  • facet.range.start - 指定构面范围的开始。例如:f.price.facet.range.start=0.0
  • facet.range.end -指定构面范围的开始。例如:f.price.facet.range.end=1000.0&
  • facet.range.gap -指定范围的跨度作为要添加到下限的值。例如:f.price.facet.range.gap=100

2.3区间分面(Interval Faceting)

区间分面允许设置区间范围和统计在这个范围内计数。 虽然与范围分面有类似的功能,但是两个方法实现却不同,而且根据上下文的不同性能也不一样。

  • facet.interval - 指定字段,例如:facet.interval=price&facet.interval=size
  • facet.interval.set - 间隔设置,例如:f.price.facet.interval.set=[0,10]&f.price.facet.interval.set=(10,100]

区间必须以’(‘或’[‘开头,跟随一个结束值,然后是逗号(‘,’),然后是开始值,然后以’)’或’]’结尾,开始值和结束值值不能为空。 比如:
(1,10) -> 大于1,小于10
[1,10) -> 大于等于1,小于10
[1,10] -> 大于等于1,小于等于10

2.3分面查询之后获得具体数据

自己想了一种不算很标准的做法:重新构建URL,在filter query增加一个查询条件,即facet.field的字段。
举例说明:
查询所有标题带有“犬”字的国画,以材质技法(subject_matter)为分面字段进行查询,构建URL:http://主机名:8983/solr/mycollection/select?facet.field=subject_matter&facet=on&q=title:犬
查询结果共12条数据,在subject_matter下分为6类,每一类的数目如下图:

现想要得到subject_matter=花鸟这一类下的两个数据,则可以重新构建URL:http://主机名:8983/solr/mycollection/select?fq=subject_matter:花鸟&q=title:犬得到这两个数据

若要按照某个字段(如id)排序,则在sort下输入id asc或者id desc进行查询结果的顺序返回。

参考:
solr-搜索-层面分析 - CSDN博客

相关文章

  • solr分面搜索尝试

    使用场景:基于索引词(terms)将搜索结果安排到类别(categories)中,通过缩小搜索结果在搜索期间提供更...

  • Solr搜索

    参见上文solr概述 - 简书 搜索 Solr搜索参数介绍 如图,solr基本的查询参数如上。 q搜索关键词q的值...

  • 微服务架构Day37-Dubbo之全文搜索

    Solr Solr是一个可扩展的,可部署,搜索,存储引擎,优化搜索大量以文本为中心的数据库Solr是开源搜索平台,...

  • 搜索引擎[solr和elasticsearch]

    一、solr Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支...

  • 搜索引擎——Solr安装、配置

    搜索引擎——Solr安装、配置 什么是solr? Solr是如何实现全文检索的呢? 索引流程:solr客户端(浏览...

  • windows下安装solr6.4.1及常见异常

    科普篇 来自百度百科:Solr简介Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索...

  • Elasticsearch学习

    还不会Elasticsearch?看这些知识入门刚刚好 Solr对比: 实时性ES高于Solr Solr传统搜索性...

  • Solr在Windows下的安装

    一、Solr的简介   Solr 是一个开源搜索平台,用于构建搜索应用程序。 它建立在 Lucene(全文搜索引擎...

  • Solr 原理篇

    Solr和ElasticSearch一样,都是基于Lucene的搜索服务器。 Solr 在传统的搜索应用中表现好于...

  • Solr

    一、Solr简介 1、Solr是什么 Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面...

网友评论

    本文标题:solr分面搜索尝试

    本文链接:https://www.haomeiwen.com/subject/mxsneftx.html