Solr Facet 简述
Facet是Solr检索的高级特性,基于搜索结果进行归类统计,生成范围更精确的导航信息,帮助与引导用户搜索,降低大结果的查找难度。如下图的各品牌,类别,价格等信息都可以通过Facet技术实现。
文章目标
本文将通过对Facet常用特性的学习,实现上图的导航效果,并简单类比Grouping特性。以下内容是基于 solr5.3.0 版本描述的。
Facet 特性
Facet 搜索特性可以分为以下几个部分
1. 一般性参数(General Parameters)
facet:facet 缺省是关闭的,需要显式打开才可以使用。打开方式也很简单,只需要添加参数 facet=true 就可以了。
facet.query:query可以传递任意符合Lucene语法的查询条件,solr会根据条件生成相应的统计信息。
比如facet.query=title:感冒,表示统计域<title>中包含<感冒>的Term的文档计数 :
select?q=*:*&wt=xml&indent=true&facet=true&facet.query=title:感冒
<lst name="facet_queries"> <int name="title:感冒">100</int> </lst>
从结果可以看到命中文档有100篇,query也支持范围查询与前缀查询,比如
facet.query=price:[10 TO 100],表示统计price介于[10,100]的文档,
facet.query=date:[2006-01-01T00:00:00Z TO 2009-01-01T00:00:00Z],表示统计date介于06年到09年的文档。
2. Field-Value参数(Field-Value Faceting Parameters)
该类别用以表示需要对哪个Field进行归类统计。比如品牌类别统计:
select?q=*:*&wt=xml&indent=true&facet=true&facet.field=brand
表示对品牌域< brand>归类,如果归类结果很多的话可以使用[ facet.limit,facet.offset ]参数控制分页,统计结果缺省是按照命中条目数量,倒序返回前100条:
<lst name="facet_fields"> <lst name="brand"> <int name="葫芦娃">200</int> <int name="天赐堂">100</int> </lst> </lst>
从结果中可以看到品牌<葫芦娃>的命中文档为200篇,<天赐堂>为100篇。那么我们就可以使用solr生成的统计结果完成章节目标的品牌,类别导航生成了。
3. 范围统计(Range Faceting)
主要针对数值, 日期范围的匹配场景,常用于价格,时间区间的导航生成。因实现方式都相似,这里就以价格区间为例:
select?q=*:*&wt=xml&indent=true&facet=true&facet.range=price&facet.range.start=0&facet.range.end=100&facet.range.gap=20
其中start,end 表示统计的价格区间,gap表示区间间隙。
<lst name="facet_ranges"> <lst name="price"> <lst name="counts"> <int name="0">10</int> <int name="20">30</int> <int name="40">0</int> <int name="60">0</int> <int name="80">0</int> </lst> <int name="gap">20</int> <int name="start">0</int> <int name="end">100</int> </lst> </lst>
从结果可以看到,价格位于 0-20 有10篇命中,20-40有30篇命中,其余区间无命中。那么我们就可以通过facet的命中结果,自实现动态价格区间,如 0-20 20以上,至此完成了价格区间的导航生成。
Faceting 与 Grouping
两者在口语表达上是很相似的,区别在于展示维度不一样,即适用于不同的场景。例如,有以下三篇文档:
Object 1
name: Phaser 4620a
ppm: 62
product_range: 6
Object 2
name: Phaser 4620i
ppm: 65
product_range: 6
Object 3
name: ML6512
ppm: 62
product_range: 7
假如对域 "product_range" 进行 group 操作,得到的结果是2,并可以返回topN条记录,类似于数据库group by。对域 "ppm" 进行 facet 操作,返回的结果是62有2篇,65有1篇,只有统计结果,不会返回详细记录。所以,应该根据应用场景选择合适的展现方式,从而决定使用 facet 还是 group 。
小结
Facet的目标是基于检索结果,生成服务性导航目录 ,引导用户在大结果集下,更有效地命中目标。常用实现方式有 Facet-Query, Field-Value Faceting, Range Faceting。
More: 更详尽的命令参数与Pivot功能,请另行参考相关文档。
参考资料
apache-solr-ref-guide-5.3.pdf
http://wiki.apache.org/solr/SimpleFacetParameters
相关推荐
在实际应用中,Solr 的 Facet 功能可以帮助用户以直观的方式探索数据,提供更精确的搜索体验。开发人员需要根据具体需求选择合适的 Facet 参数,并优化查询性能,以实现高效的数据分析。同时,持续跟踪 Solr 的更新...
本书立足全球视野,综合Solr技术的发展和应用、从业人员的学习曲线,以及中英文资料的供给情况,给自己设定了一个极高的目标:力争在内容的全面性、系统性、深浅度和实战性上概括所有的同类书。从完成的结果上来看,...
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http G Solr et操作提出查找请求,并得到XML...
`EasyNet.Solr`可能是核心库,包含了与Solr服务器通信的代码和逻辑,而`ClientDemo`很可能是演示应用,用于展示如何使用`EasyNet.Solr`库来实现分组统计和facet功能。 总的来说,这个示例展示了如何利用`easysolr...
Solr创建的索引与Lucene完全兼容,这意味着Solr可以阅读和使用其他Lucene应用程序构建的索引。 Solr的功能包括分布式索引设计,它允许索引自动分割成多个部分,并且能够在不停止Solr服务器的情况下更改配置。Solr还...
2. 查询价格在0到400之间的商品,返回id、name和price字段,并按类别进行 faceting:`http://localhost:8983/solr/select?q=price:[0%20TO%20400]&fl=id,name,price&facet=true&facet.field=cat` 通过以上步骤,你...
Solr 4.7是其在2013年的版本,它提供了高效、可扩展的全文检索、命中高亮、 faceted search(面向切面的搜索)、结果排序等功能,广泛应用于网站内容搜索、电子商务产品搜索等领域。以下是对Solr 4.7中文企业开发...
- **Faceting**:Solr支持字段统计(Faceting),可以通过`facet.field`和`facet.query`参数来实现,帮助用户分析数据分布。 - **统计函数**:通过`stats`参数可以计算字段的统计信息,如平均值、总和、最大值、...
Solr是一种基于Apache ...Solr查询语法的学习和应用可以帮助开发者快速实现复杂的搜索引擎功能,为用户提供更为精准和丰富的搜索体验。通过掌握本文提到的查询语法,开发者可以更好地使用Solr来满足特定的搜索需求。
7. **工具支持**:在实际应用中,我们可能需要结合其他工具,如Solr或Elasticsearch,它们都基于Lucene并提供了更高级别的Facet管理功能。了解如何在这些工具中集成和配置Facet,将有助于提升整体解决方案的效率。 ...
Solr 是一个开源的全文搜索服务器,由 Apache Lucene 提供支持,被广泛应用于构建高效、可扩展的搜索应用。本教程将深入讲解 Solr 的基本使用,包括查询、修改和删除操作,以及统计功能。 一、Solr 安装与配置 1. ...
Solr 提供了强大的全文搜索、近实时搜索、 faceted search(分面搜索)、命中高亮、拼写检查、自动补全等多种功能,广泛应用于网站内容搜索、电商产品搜索、企业内部文档检索等领域。 **1. Solr 的核心概念** - **...
Solr是一款高性能、可伸缩的企业级搜索引擎,广泛应用于需要复杂全文检索功能的系统中。它基于Java开发,能够提供高度灵活的配置机制,并且具备强大的索引与查询功能。Solr的核心优势在于其出色的扩展性和灵活性,这...
Solr 是一个开源的全文搜索引擎,基于 Java...学习 Solr 不仅要掌握其核心概念和技术,还要熟悉如何利用它解决实际的搜索问题。通过不断地实践和学习,你将成为 Solr 的专家,能够在各种项目中游刃有余地运用这个工具。
通过本教程的学习,开发者不仅可以掌握SpringMVC、Mybatis、Redis、Solr、Nginx等关键技术,还能够深入了解如何运用这些技术构建复杂的分布式电商系统。这对于提升个人技能和推动项目成功都具有重要意义。
4. **cl-solr 库的功能**: cl-solr 提供了对 Solr 的全面封装,包括但不限于创建索引、更新文档、删除文档、搜索操作、处理结果集、处理 facet(分面)搜索、拼写检查、同义词等功能。它还可能包含了错误处理和事务...
solr 运行API // build the api$ go build -v -o api// start the api with the initialization options$ ./api -create-collection -init-schema -index-data -init-suggester 运行网络应用(打开新的终端标签) ...
在R环境中,`solrium`提供了方便的接口来处理Solr相关的任务,极大地扩展了R在大数据搜索和分析中的应用范围。 一、solrium包的核心功能: 1. **连接管理**:`solrium`包可以建立和管理到Solr服务器的连接,设置URL...
对于分面搜索,可以设置`facet.field`和`facet.query`: ```java query.setFacet(true); query.addFacetField("category"); query.addFacetQuery("author:John Doe"); ``` 在处理大量数据时,SolrJ提供了批量操作...