分类: 搜索(lucene&solr) 源码分析2013-08-05 15:33 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);
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这个类主要负责完成把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(分面)查询,它能够帮助用户在大量数据中进行高效、多维度的筛选。Facet 查询是数据分析和信息检索中的一个重要工具,允许用户查看数据的不同...
通过分析Solr 6.2.0的源码,我们可以深入了解其内部工作机制,包括索引构建、查询处理、分布式协调等核心模块。源码中包含了丰富的注释和示例,帮助开发者深入理解Solr的设计思想和实现细节。 总结来说,Solr 6.2.0...
Facet 查询是 Solr 的高级搜索功能之一,可以给用户提供更友好的搜索体验。在搜索关键字的同时,能够按照 Facet 的字段进行分组并统计。下面是对 SolrJ 的 Facet 查询的总结: 一、Facet 简介 Facet 是 Solr 的...
Solr项目源码及solr资源包是一个针对搜索引擎平台Apache Solr的学习与实践资源集合,主要结合了Spring Data Solr框架进行操作。这个项目旨在帮助开发者更好地理解和运用Solr进行数据索引和检索。让我们详细地探讨...
毕业设计基于Springboot的个人博客系统源码,集成solr服务器毕业设计基于Springboot的个人博客系统源码,集成solr服务器毕业设计基于Springboot的个人博客系统源码,集成solr服务器毕业设计基于Springboot的个人博客...
源码分析是深入理解一个软件系统工作原理的重要途径,对于Solr这样的复杂系统尤其如此。这里我们将围绕"solr-9.0.0-src.tgz"这个源码包,详细探讨其主要组成部分、核心功能以及开发过程中的关键知识点。 1. **Solr...
这个源码包包含了 Solr 的所有源代码,对于理解 Solr 的工作原理、进行二次开发或者定制化配置有着非常重要的意义。接下来,我们将深入探讨 Solr 6.6.0 中的一些关键知识点。 一、Solr 架构与组件 Solr 的核心架构...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
标题 "solr与java结合的小例子" 涉及的核心知识点是Apache Solr与Java的集成应用。Apache Solr是一个开源的企业级全文搜索引擎,它提供了一个高效、可扩展的搜索和导航层,常用于大数据量的网站内容和文档检索。在...
- **云原生集成**:研究如何将Solr与Kubernetes等云原生技术结合,实现更高级的自动化和弹性伸缩。 总之,Solr 4.10.4的源码提供了一次深入理解全文检索引擎工作原理的机会,无论是为了优化现有Solr实例,还是为了...
Solr in action 源代码。Solr实战源码。Solr实战源码。Solr实战源码。Solr实战源码
solr全文检索,里面包含文档,源代码,jar包,使用的是solr4.2,东西比较全,安装文档就能跑起来,,适合参考借鉴
本人用ant idea命令花了214分钟,35秒编译的lucene-solr源码,可以用idea打开,把项目放在D:\space\study\java\lucene-solr路径下,再用idea打开就行了
当我们初学tomcat的时候, 肯定先要学习怎样启动tomcat. 在tomcat的bin目录下有两个启动tomcat的文件, 一个是startup.bat, 它用于windows环境下启动tomcat; 另一个是startup.sh, 它用于linux环境下tomcat的启动....
在这个源码包中,我们可以深入理解Solr的工作原理以及其核心组件的实现。 首先,让我们了解Solr的基本架构。Solr基于Lucene库构建,Lucene是一个高性能、全文本检索库。Solr在其之上添加了分布式处理、集群管理、...
本文将深入探讨"solr5的ik中文分词器源码"的相关知识点。 1. **IK分词器概述**: IK分词器是针对Java开发的,它具有较高的分词精度和良好的可扩展性。IK分词器最初由王吉伟开发,现在由社区维护。它支持自定义词典...
Solr权威指南-上卷 本书作者是国内较早接触Solr的技术专家之一,多年一直在Solr的研究、实践和布道的路上...然后讲解了Solr与MapReduce、HDFS、Hbase、Kafka、Flume、Storm、Spark等大数据技术的结合使用的集成方法。
在深入探讨Solr-search过程的源码分析时,我们聚焦于关键步骤与核心组件,以求全面理解Solr搜索机制的内部运作。Solr作为一款高性能、可伸缩的开源搜索平台,其搜索处理流程涉及多个层次的组件交互与数据处理,其中...
Solr的安装部署包,只能分卷上传,稍后上传依赖jar包,及部署攻略
总的来说,这个示例展示了如何利用`easysolr.net`这个.NET客户端库,结合Solr的分组统计和facet功能,进行高效的全文搜索和数据分析。通过学习和实践这些内容,开发者可以更好地构建和优化针对大量数据的搜索应用,...