solr将以导航为目的的查询结果称为facet. 它并不会修改查询结果信息, 只是在查询结果上根据分类添加了count信息, 然后用户根据count信息做进一步的查询, 比如淘宝的查询列表中, 上面会表示不同的类目相关查询结果的数量.
比如搜索数码相机, 在搜索结果栏会根据厂商, 分辨率等维度列出, 这里厂商, 分辨率就是一个个facet.
然后在厂商下面会有nikon, canon, sony等品牌, 这个叫约束(constraints)
接下来是根据选择, 列出当前的导航路径, 这个叫面包屑(breadcrumb).
solr有几种facet:
普通facet, 比如从厂商品牌的维度建立fact
查询facet, 比如根据价格查询时, 将根据价格, 设置多个区间, 比如0-10, 10-20, 20-30等
日期facet, 也是一种特殊的范围查询, 比如按照月份进行facet.
facet的主要好处就是可以任意对搜索条件进行组合, 避免无效搜索, 改善搜索体验.
facet都是在查询时通过参数指定. 比如
在http api中这样写:
引用
"&facet=true&facet.field=manu"
. java代码这样写:
- new SolrQuery("*:*").setFacet(true).addFacetField("manu");
而xml返回的结果为这样:
- <lst name="facet_fields">
- <lst name="manu">
- <int name="Canon USA">17</int>
- <int name="Olympus">12</int>
- <int name="Sony">12</int>
- <int name="Panasonic">9</int>
- <int name="Nikon">4</int>
- </lst>
- </lst>
通过java代码可以这样获取facet结果:
- List<FacetField> facetFields = queryResponse.getFacetFields();
在已有的查询基础上增加facet query, 可以这样写:
- solrQuery.addFacetQuery("quality:[* TO 10]")
比如对价格按照指定的区间进行facet, 可以这样加上facet后缀:
引用
&facet=true&facet.query=price:[* TO 100]
&facet.query=price:[100 TO 200];&facet.query=[price:200 TO 300]
&facet.query=price:[300 TO 400];&facet.query=[price:400 TO 500]
&facet.query=price:[500 TO *]
&facet.query=price:[100 TO 200];&facet.query=[price:200 TO 300]
&facet.query=price:[300 TO 400];&facet.query=[price:400 TO 500]
&facet.query=price:[500 TO *]
如果要对价格在400到500期间的产品做进一步的搜索, 那么可以这样写(使用了solr的过滤查询):
引用
http://localhost:8983/solr/select?q=camera &facet=on&facet.field=manu&facet.field=camera_type &fq=price:[400 to 500]
注意这里的facet field不再包含price了
如果这里对类型做进一步的查询, 那么query语句可以这样写:
引用
http://localhost:8983/solr/select?q=camera &facet=on&facet.field=manu &fq=price:[400 to 500] &fq=camera_type:SLR
facet的使用场景:
1.类目导航
2.自动提示, 需要借助一个支持多值的tag field.
3.热门关键词排行, 也需要借助一个tag field
参考文档:
http://www.lucidimagination.com/devzone/technical-articles/faceted-search-solr
相关推荐
在Solr中,分组统计(Grouping)是一种强大的功能,它允许用户基于某个字段对搜索结果进行分组,以便更好地理解和分析数据。分组统计可以提供每个分组内的文档数量,或者根据特定查询对每个分组进行进一步的过滤。 ...
- ** faceting(分面搜索)**: 提供了对搜索结果进行分组和计数的功能,便于用户进行导航和筛选。 - **拼写纠正**:利用SpellChecker组件提供拼写建议。 - **高亮显示**:突出显示查询结果中的关键词。 - **近...
5. **搜索功能**:掌握如何构建查询语句,使用查询解析器和查询函数,以及进行结果排序和分组。 6. **分布式搜索**:Solr4.9支持多节点部署,了解如何配置和管理分布式环境,以提高搜索性能和容错性。 7. **JAR...
- 高级查询功能:Solr支持模糊匹配、短语匹配、范围查询、排序、分组、高亮显示等多种高级搜索特性。 5. **Solr相关资源** - `lucidworks-solr-refguide-官方版solr3.4.pdf`: 这是Solr 3.4的官方参考指南,详细...
2. ** faceting(分面)**:允许用户以多种方式筛选和分组搜索结果,提供更丰富的浏览体验。 3. **高级查询和排序**:支持布尔运算、范围查询、评分排序等复杂查询操作。 4. **实时索引**:Solr能快速地添加、更新和...
例如,它不支持JOIN操作,但提供了丰富的聚合函数和分组功能。 在实际应用中,你还需要考虑性能优化,如使用Solr的缓存机制、分页查询、查询过滤器(Filter Queries)等。同时,为了确保高可用性和可扩展性,可能...
Solr的功能包括分布式索引设计,它允许索引自动分割成多个部分,并且能够在不停止Solr服务器的情况下更改配置。Solr还具备高可用性,没有单点故障,并且集成了Apache Zookeeper进行分布式协调和元数据集群。Solr还能...
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
- **集合(Collections)与核心(Cores)**:在Solr中,集合是逻辑上的分组,包含一个或多个核心。核心是Solr实例的基础单位,每个核心有自己的索引和配置。 - **文档(Documents)**:Solr处理的基本单位是文档,...
faceted搜索是Solr的高级搜索功能之一,允许用户在搜索结果中进行分组统计。例如,可以按照商品的分类进行分组显示,提供类似面包屑导航的用户体验。在Solr中,分面查询的结果字段为facet_counts,与responseHeader...
5. **结果排序与过滤**:根据用户的需求对检索结果进行排序、分组等操作。 6. **返回结果**:将最终的检索结果以指定格式返回给客户端。 #### 三、Lucene与Solr的区别 虽然两者都基于Lucene内核,但在实际应用中...
Solr还提供了灵活的XML配置,支持Lucene查询语言的扩展,如结果分组、过滤和高亮显示,以及一个全面的HTML管理界面和日志监控功能。 Solr与Lucene的关系并非替代,而是互补。Lucene是一个全文检索库,专注于搜索...
3. **分组查询**:Solr支持基于某个字段的分组查询,可以将搜索结果按照特定字段(如类别、品牌等)进行分组,方便用户查看不同分类下的结果。通过`group.field`参数设置分组字段,`group.ngroups`获取总分组数,`...
本文将深入探讨Solr 3.6版本中的核心功能:增删改查(CRUD)操作,高亮显示,以及分组查询。 ### 1. Solr的增删改查操作 #### 1.1 创建(Create) 在Solr中,创建文档通常涉及到定义一个XML或JSON格式的文档结构...
同时,5.3.2引入了更强大的聚合功能,支持统计计算、分组、排序等高级查询操作。 6. **更新处理链**:Solr的Update Request Processor链允许在索引文档之前或之后执行一系列操作,如字段值的转换、删除重复的文档等...
### Apache Solr 企业搜索引擎教程知识点总结 #### 1. Apache Solr 概述 - **Solr**:Apache Solr 是一款高度可扩展且高性能的企业级搜索平台,由Apache软件基金会维护。它是一个开源搜索服务器,使用Java语言编写...
- **聚合策略**:讲述如何对搜索结果进行分组,以及如何通过字段折叠来简化结果展示。 - **性能优化**:分享在大规模数据集上实现聚合功能时需要注意的性能问题。 #### 部署到生产环境 - **最佳实践**:分享将Solr...
4. **查询与筛选**:Solr提供丰富的查询语法,包括标准查询解析器(Standard Query Parser)、Lucene查询语法(Lucene Query Parser)、布尔操作符、范围查询、高亮显示、分组和 faceting 等。这些功能使用户能精确...
- **结果排序与分组**: 掌握排序和分组查询结果的方法,以及如何实现自定义排序策略。 4. **性能调优** - **索引结构优化**: 了解如何优化索引结构以提高查询速度。 - **缓存机制**: 使用 Solr 的缓存机制来减少...