`

solr的facet查询

阅读更多
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 *]


如果要对价格在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
分享到:
评论
4 楼 yao-dd 2016-11-27  
   
3 楼 huangyunbin 2013-03-19  
我一直没搞清楚facet查询的意思,我感觉就是group by的意思。
2 楼 zhan19861022 2012-11-15  
我想咨询下,如果用采用Faceted Search,那搜索是否只能一次取出全部集合了,具体分页也只是前台分解数据?
1 楼 huangfoxAgain 2012-02-25  
淘宝的商品分类是人工维护的吧?

然后在采用类似的group by

相关推荐

    solr facet 笔记

    Solr 是一个流行的开源搜索引擎,提供了丰富的功能,其中包括 Facet(分面)查询,它能够帮助用户在大量数据中进行高效、多维度的筛选。Facet 查询是数据分析和信息检索中的一个重要工具,允许用户查看数据的不同...

    solrj的facet查询总结

    Facet 查询是 Solr 的高级搜索功能之一,可以给用户提供更友好的搜索体验。在搜索关键字的同时,能够按照 Facet 的字段进行分组并统计。下面是对 SolrJ 的 Facet 查询的总结: 一、Facet 简介 Facet 是 Solr 的...

    solr查询语法.pdf

    在Solr中,分面查询的结果字段为facet_counts,与responseHeader、response同级。 拼写检查功能允许用户对查询词进行校正,以提供更准确的搜索结果。这通过在solrconfig.xml中配置名为SpellCheckComponent的...

    java进阶Solr从基础到实战

    3. Facet查询 4. Group查询 5. 高亮查询 6. Suggest查询 7. SolrJ 章节三:Solr高级(上) 1. Solr Cloud 2. 函数查询 3. 地理位置查询 4. JSON Facet 章节四:Solr高级(下) 1. 深度分页 2. Solr Join查询 3. 相关...

    Solr权威指南-上卷

    包括部署、配置、Solr Core、Solr DIH、全量导入、增量导入、索引、中文分词、查询组件、Solr Facet、高亮、查询建议,以及企业如何在真实的项目中使用Solr。不仅讲解了基本概念和使用方法,而且还分析了各组件的...

    Solr分组统计

    同时,模糊查询和精确查询是Solr查询语言(Lucene Query Parser Syntax)的一部分,它们分别用于处理用户可能输入的不完全匹配或完全匹配的关键词。 模糊查询允许用户使用通配符或近似搜索来找到相似或拼写相近的...

    Solr 搜索引擎 asp.net实现 示例详细操作步骤

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http G Solr et操作提出查找请求,并得到XML...

    solr基础知识介绍

    Solr的术语部分涉及到了多个与Solr操作相关的概念,例如Auto-warming是指自动预热操作,有助于提高查询性能;Facet指的是查询结果的分组统计功能;Document是指索引中的文档;Field指的是文档中的字段;IndexWriter...

    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` 通过以上步骤,你...

    Lucene5学习之Facet(续)

    4. **Facet结果解析**:`Facets`接口提供了方法来解析Facet查询的结果,可以获取每个维度的计数,以及根据用户交互更新的Facet筛选条件。 5. **性能优化**:由于Facet计算可能涉及大量数据,因此需要考虑性能优化。...

    solr_api

    - **Faceting**:Solr支持字段统计(Faceting),可以通过`facet.field`和`facet.query`参数来实现,帮助用户分析数据分布。 - **统计函数**:通过`stats`参数可以计算字段的统计信息,如平均值、总和、最大值、...

    solr4.7中文企业开发参考文档

    3. **分组查询**:Solr支持基于某个字段的分组查询,可以将搜索结果按照特定字段(如类别、品牌等)进行分组,方便用户查看不同分类下的结果。通过`group.field`参数设置分组字段,`group.ngroups`获取总分组数,`...

    src.rar_solr

    3. 统计查询:`facet.query` 可以对任意查询进行计数,如 `http://localhost:8983/solr/my_core/select?q=*:*&facet=true&facet.query={!tag=myTag}taggedQuery`。 七、Solr 高级特性 1. 分词分析:通过配置分析器...

    Apache Solr(solr-7.7.3.zip)

    在查询时添加 `facet=true` 和 `facet.field=&lt;field&gt;` 参数即可启用分面。 - **命中高亮(Highlighting)**: Solr 可以在搜索结果中高亮显示匹配的关键词,提高用户体验。通过 `hl=true` 和 `hl.fl=&lt;fields&gt;` 参数...

    高效的企业级搜索引擎Solr

    例如,在使用`facet`和`fq`参数时,合理调整filterCache可以大幅提升性能表现。 ##### 3. 查询结果缓存(queryResultCache) queryResultCache用于缓存查询结果,这里的缓存是针对完全有序的结果集。通过缓存查询...

    solr技术方案.pdf

    此外,Solr的Facet功能提供分类搜索,Tika用于解析不同类型的文件,Filter和Spelling组件则处理字符串过滤和拼写检查。 Solr的HTTP接口使得它易于通过各种编程语言(如Ruby、PHP、Java、JSON和JavaScript)进行交互...

    Solr 入门资料

    在 Solr 中,配置分面导航需要在 schema.xml 文件中定义相关字段,并在查询请求中指定 facet 参数。 在 Solr 中,索引数据通常通过 POST 请求发送到 Solr 服务器,数据格式可以是 XML、JSON 或 CSV。Solr 提供了一...

    大型SpringMVC,Mybatis,Redis,Solr,Nginx,SSM分布式电商项目视频教程

    - 配置facet参数。 - 支持多字段分面。 #### 五、Nginx负载均衡与反向代理 **Nginx**是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 1. **Nginx安装与配置**: - 安装环境准备:...

    cl-solr:用于 Common Lisp 的 Apache Solr API

    4. **cl-solr 库的功能**: cl-solr 提供了对 Solr 的全面封装,包括但不限于创建索引、更新文档、删除文档、搜索操作、处理结果集、处理 facet(分面)搜索、拼写检查、同义词等功能。它还可能包含了错误处理和事务...

Global site tag (gtag.js) - Google Analytics