`
wbj0110
  • 浏览: 1603301 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

结合源码浅析solr facet

    博客分类:
  • Solr
阅读更多

分类: 搜索(lucene&solr) 源码分析
 1234人阅读 评论(0) 收藏 举报
基于solr4.4   
 SearchHandler实现SolrRequestHandler,SolrCoreAware(inform接口),在SolrCore初始化的过程中,
会依次调用SolrRequestHandler中的inform(SolrCore core),在inform的调用中,初始化SearchHandler中的components对象,
component对象包含有QueryComponent、FacetComponent、HighlightComponent等,其中QueryComponent主要负责查询部分,
FacetComponent处理facet、HighlightComponent负责高亮显示。在查询过程中,会根据SearchHandler中的component配置,依次调用component的链。
    在处理请求时,SearchHandler.handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp)的实现中
会调用component的prepare、process、distributedProcess方法, 在QueryComponent中调用SolrIndexSearcher,
SolrIndexSearcher继承了lucene的IndexSearcher类进行搜索。solr FacetComponent实现对Term的层面的统计,本章重点说一下solr中的FacetComponent组件。
    QueryComponent会先处理q参数里的查询,查询的结果的DocID保存在DocSet里,这里是一个无序的document ID 的集合,把docSet封装到SimpleFacets里
    在FacetComponent.process方法中,调用SimpleFacets.getFacetCounts()获取统计结果,对于返回给客户端的结果有三种类型,分别是facet_queries、facet_fields、facet_dates、facet_ranges,我们用的比较多的是facet_fieds的统计(查询参数中包含facet.filed=xxx,可以包含多个facet.field),facet_filed的统计最终会调用SimpleFacets.getTermCounts(field),在这个方法实现中根据facet.method参数的值 的不同调用对应的统计实现。
      facet.method通常包含enmu、fc两个值,默认是fc,该字段表示了facet的两种统计算法。
      enum通过遍历field的terms来计算facet count,
参见SimpleFacets中的代码,
counts = getFacetTermEnumCounts(searcher, docs, field, offset, limit, mincount,missing,sort,prefix);
enum适用于字段值比较少的情况,Solr会遍历该字段的所有取值,并从filterCache里为每个值分配一个filter,然后计算每个filter与主查询的交集.
      fc(filed cache)通过遍历document,在文档内搜索cache内的值,如果找到就将cache内的值加1
参见SimpleFacets中的代码,
UnInvertedField uif = UnInvertedField.getUnInvertedField(field, searcher);
counts = uif.getCounts(searcher, docs, offset, limit, mincount,missing,sort,prefix);
FacetComponent 在根据某个field的词时,会用到fieldValueCache,key是facet.field的值,value是UnInvertedField,
UnInvertedField这个类主要负责完成把field域每个词Term,以及词Term在所有文档field域的频率,即出现的次数。
保存在一个数组中,创建的UnInvertedField保存在fieldValueCache缓存中,得到UnInvertedField后,
调用UnInvertedField的getCounts方法,跟查询到的document ID 做交集,如果不是查询结果的document ID,,则该Field的词的个数为0,
除此之外,还对field出现的词做一个排序,solr的FacetComponet有两种排序选择,分别是count和index,count是按每个词出现的次数,
index是按词的字典顺序。如果查询参数不指定facet.sort,solr默认是按count排序。
分享到:
评论

相关推荐

    solr facet 笔记

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

    solr-6.2.0源码

    通过分析Solr 6.2.0的源码,我们可以深入了解其内部工作机制,包括索引构建、查询处理、分布式协调等核心模块。源码中包含了丰富的注释和示例,帮助开发者深入理解Solr的设计思想和实现细节。 总结来说,Solr 6.2.0...

    solrj的facet查询总结

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

    Solr项目源码及solr资源包

    Solr项目源码及solr资源包是一个针对搜索引擎平台Apache Solr的学习与实践资源集合,主要结合了Spring Data Solr框架进行操作。这个项目旨在帮助开发者更好地理解和运用Solr进行数据索引和检索。让我们详细地探讨...

    毕业设计基于Springboot的个人博客系统源码,集成solr服务器.zip

    毕业设计基于Springboot的个人博客系统源码,集成solr服务器毕业设计基于Springboot的个人博客系统源码,集成solr服务器毕业设计基于Springboot的个人博客系统源码,集成solr服务器毕业设计基于Springboot的个人博客...

    solr(solr-9.0.0-src.tgz)源码

    源码分析是深入理解一个软件系统工作原理的重要途径,对于Solr这样的复杂系统尤其如此。这里我们将围绕"solr-9.0.0-src.tgz"这个源码包,详细探讨其主要组成部分、核心功能以及开发过程中的关键知识点。 1. **Solr...

    solr6.6.0源码

    这个源码包包含了 Solr 的所有源代码,对于理解 Solr 的工作原理、进行二次开发或者定制化配置有着非常重要的意义。接下来,我们将深入探讨 Solr 6.6.0 中的一些关键知识点。 一、Solr 架构与组件 Solr 的核心架构...

    快速上手数据挖掘之solr搜索引擎高级教程(Solr集群、KI分词)第15讲 solr之Facet 共7页.pptx

    Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...

    solr与java结合的小例子

    标题 "solr与java结合的小例子" 涉及的核心知识点是Apache Solr与Java的集成应用。Apache Solr是一个开源的企业级全文搜索引擎,它提供了一个高效、可扩展的搜索和导航层,常用于大数据量的网站内容和文档检索。在...

    solr 4.10源码

    - **云原生集成**:研究如何将Solr与Kubernetes等云原生技术结合,实现更高级的自动化和弹性伸缩。 总之,Solr 4.10.4的源码提供了一次深入理解全文检索引擎工作原理的机会,无论是为了优化现有Solr实例,还是为了...

    Solr in action Source Code

    Solr in action 源代码。Solr实战源码。Solr实战源码。Solr实战源码。Solr实战源码

    solr源码及文档

    solr全文检索,里面包含文档,源代码,jar包,使用的是solr4.2,东西比较全,安装文档就能跑起来,,适合参考借鉴

    lucene-solr源码,编译成的idea项目源码

    本人用ant idea命令花了214分钟,35秒编译的lucene-solr源码,可以用idea打开,把项目放在D:\space\study\java\lucene-solr路径下,再用idea打开就行了

    tomcat源码和solr基础代码.rar

    当我们初学tomcat的时候, 肯定先要学习怎样启动tomcat. 在tomcat的bin目录下有两个启动tomcat的文件, 一个是startup.bat, 它用于windows环境下启动tomcat; 另一个是startup.sh, 它用于linux环境下tomcat的启动....

    solr-4.5源码包

    在这个源码包中,我们可以深入理解Solr的工作原理以及其核心组件的实现。 首先,让我们了解Solr的基本架构。Solr基于Lucene库构建,Lucene是一个高性能、全文本检索库。Solr在其之上添加了分布式处理、集群管理、...

    solr5的ik中文分词器源码

    本文将深入探讨"solr5的ik中文分词器源码"的相关知识点。 1. **IK分词器概述**: IK分词器是针对Java开发的,它具有较高的分词精度和良好的可扩展性。IK分词器最初由王吉伟开发,现在由社区维护。它支持自定义词典...

    Solr权威指南-上卷

    Solr权威指南-上卷 本书作者是国内较早接触Solr的技术专家之一,多年一直在Solr的研究、实践和布道的路上...然后讲解了Solr与MapReduce、HDFS、Hbase、Kafka、Flume、Storm、Spark等大数据技术的结合使用的集成方法。

    Solr-search过程源码分析

    在深入探讨Solr-search过程的源码分析时,我们聚焦于关键步骤与核心组件,以求全面理解Solr搜索机制的内部运作。Solr作为一款高性能、可伸缩的开源搜索平台,其搜索处理流程涉及多个层次的组件交互与数据处理,其中...

    Solr 源码包Part2

    Solr的安装部署包,只能分卷上传,稍后上传依赖jar包,及部署攻略

    Solr分组统计

    总的来说,这个示例展示了如何利用`easysolr.net`这个.NET客户端库,结合Solr的分组统计和facet功能,进行高效的全文搜索和数据分析。通过学习和实践这些内容,开发者可以更好地构建和优化针对大量数据的搜索应用,...

Global site tag (gtag.js) - Google Analytics