`
suichangkele
  • 浏览: 200775 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene中的docValue实现源码解读(一)——综述

阅读更多

        docValue是一个很好用的东西,他是存储的正向的信息,即一个doc-->该doc的一个值,他是区别于stored的域的。在lucene中,docValue是按照列进行存储的,即所有的doc的某个相同名字的域存储在一起,而不是一个doc的所有的域的doc值存放在一起,这样做的好处是在使用lucnee中经常会按照域进行使用,比如我们在对做facet、sort的时候我们可能会使用到所有的doc的某个域的值,因此按照列进行存储可以将硬盘上的某个块加载到内存中,实现快速的读取某个域下所有的doc的docValue。而在lucene中,存储的域是按照doc进行的,即在写存储的域的时候,会先把一个doc所有的域都写在一起,然后才再写下一个doc的存储的域,这个特性适合于获得一个doc的很多的存储域,而不适合域查找多个doc的某一个域。所以当我们在做facet、sort的时候,是不可以使用存储域的,倒不是说不行,而是他的实现方式导致了效率很低下。而在lucene4.x中引入的docValue却更加适合这个功能。

        问题是,在3.x的时候没有docValue,那么lucene是如何做sort、facet的呢?答案很简单,使用的是词典表。在lucene4.x中,如果对一个域不建立docValue,也是可以做sort、facet的,他的实现原理和之前的一样,都是把整个域的所有的term从lucene词典表中读出来,然后再内存中做计算,找到每个doc对应的term,也就是找到正向信息。这样的效率是很低的,因为在打开一个段的时候,要把词典表读到内存中,做完计算后找到的正向信息还要保留在内存中,这是效率很差的。尤其是对于java这种内存回收比较差的语言来说(保留的地方就是lucene的FieldCache.DEFAULT中,是一个很大的map)。所以如果需要对一个域做facet、solr,使用docValue是一个更好的方式。docValue是不会使用到内存的(我说的是 jvm的内存,不是操作系统的虚拟内存),每个doc的docValue都是含有索引的,可以直接根据所以进行一次io即可获得一个doc的某个域的docValue,在某些类型的docValue中,在读取一个域的docValue的时候,会把整个部分的docValue的值都load到操作系统的内存中,这样在读取这些docValue的时候,就和在内存中一样了,能实现更高的效率。

       在lucene4.10.4中,有五种类型的docValue,这里我要把docValue的具体的存储和读取都看一遍,来看看lucene到底是怎么做的,以及我们在工作中应该如何使用docValue,以实现更高的效率。

 

 

分享到:
评论

相关推荐

    Lucene项目的文档和源码

    Lucene项目是Apache软件基金会的一个开源项目,它是一个全文搜索引擎库,主要由Java编写,被广泛应用于各种信息检索系统中。这个压缩包包含了Lucene项目的文档和源码,对于想要深入学习Java和信息检索技术的开发者来...

    lucene3源码分析

    ### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1. 总论 全文检索系统是一种高效的信息检索技术,能够帮助用户在海量文档中快速找到包含特定关键词的信息。Lucene是Java领域内最受欢迎的全文...

    Lucene源码解读1

    【Lucene源码解读1】 Lucene是一款开源的全文搜索引擎库,由Apache软件基金会开发,广泛应用于各种信息检索系统。其强大的搜索功能和高效的性能深受开发者喜爱。在深入理解Lucene之前,我们需要先了解它的核心概念...

    lucene.net2.9.4.2源码版

    通过对源码的深入研究,开发者不仅可以掌握搜索引擎的底层原理,还能学习到如何在.NET环境中实现高效、稳定的搜索功能。同时,通过对2.9.4版的局部改进,该版本在性能和稳定性上都有所提升,为.NET开发者提供了更好...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    Lucene.Net-2.9.2 c#源码

    Lucene.Net是一个开源的全文检索库,它是Apache Lucene项目在.NET平台上的实现,适用于C#开发者。版本2.9.2是该库的一个稳定版本,提供了强大的文本搜索功能,广泛应用于各种搜索引擎和信息检索系统。本篇将详细探讨...

    Lucene学习源码.rar

    它提供了一个简单但功能强大的API,使得开发者能够轻松地在应用中实现文本检索功能。Lucene是用Java编写的,但有多种语言的接口,包括Python、.NET等。本文将主要围绕Java Lucene进行深入探讨,并基于提供的“Lucene...

    lucene.net 2.9.1 源码

    《深入剖析Lucene.NET 2.9.1:源码解析与应用...总结,Lucene.NET 2.9.1的源码不仅是一份学习资料,也是实践中的宝贵工具。深入理解其工作机制,将有助于提升.NET平台上的搜索技术能力,实现高效、精准的全文检索功能。

    lucene in action源码2

    总之,《Lucene in Action》的源码是一份宝贵的教育资源,它能帮助开发者深入理解搜索引擎的运作原理,从而在实际项目中更好地利用Lucene。通过细致研究源码,我们不仅可以解决具体的技术问题,还能培养出更强的解决...

    lucene全文检索案例源码

    通过对“lucene全文检索案例源码”的学习,我们可以理解Lucene如何在实际项目中实现全文检索。从索引构建到搜索执行,每个步骤都至关重要。通过源码的深入研究,有助于我们在实际开发中更好地运用Lucene,提升搜索...

    基于lucene搜索引擎的java源码

    学习这个源码包可以帮助你理解如何在Java环境中使用Lucene进行全文检索,以及如何实现数据库与索引之间的交互。这不仅涉及到了Lucene的核心功能,也涵盖了实际项目中常见的增量索引和数据库集成问题。通过阅读和理解...

    Lucene中的FST算法描述

    4. FSTHashMap:这是一个基于探测法实现的HashMap,其key是基于FSTNode生成的hash值,而value是FSTnode在FSTbytes数组中的位置索引。FSTHashMap可以加速判断某个节点是否已经被存储到FSTbytes中。 5. Frontier:这...

    使用Lucene对doc、docx、pdf、txt文档进行全文检索功能的实现 - 干勾鱼的CSDN博客 - CSDN博客1

    在Java开发中,Lucene被广泛用于实现文件的全文检索功能,包括对doc、docx、pdf、txt等常见格式文档的文本内容检索。在本文中,我们将探讨如何使用Lucene对这些文件类型进行全文检索的实现。 首先,为了实现全文...

    lucene源码和程序

    总之,Lucene是一个强大的全文检索工具,通过其API,开发者可以轻松地在Java应用中实现高效、灵活的搜索功能。无论你是希望为网站添加搜索功能,还是构建大型的企业级搜索解决方案,Lucene都是值得信赖的选择。通过...

    Lucene In Action 2源码

    《Lucene In Action 2源码》是针对著名图书《Lucene In Action 2nd Edition》的配套代码资源,这本书是关于Apache Lucene全文搜索引擎库的一部经典之作。Lucene是一个开源的Java库,用于构建高性能、可扩展的信息...

    lucene 华电项目 源码

    在IT领域,搜索引擎技术是不可或缺的一部分,而Apache Lucene作为一款开源的全文检索库,被广泛应用在各种信息检索系统中。本文将结合“lucene 华电项目 源码”,深度解析Lucene的核心原理以及在华电项目中的实际...

    Lucene.Net源码与说明文档

    **Lucene.Net** 是一个基于 .NET Framework 的全文搜索引擎库,它是 Apache Lucene 项目的 .NET 实现。这个开源项目提供了高效、可扩展的搜索功能,使得开发者能够在其应用程序中轻松地实现高级的文本检索功能。 **...

    运用在lucene中的中文分词算法源码

    《深入剖析Lucene中的中文分词算法源码》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用于各种数据检索系统。而中文分词是Lucene处理中文文本时的关键步骤,它决定了搜索的准确性和效率。本文将...

    lucene-2.9.2.jar包+源码

    在Lucene-2.9.2的源码中,你可以看到关于TF-IDF的具体实现,如`TFIDFSimilarity`类,它是Lucene对TF-IDF算法的封装。它不仅包含了TF和IDF的计算逻辑,还考虑了诸如短语匹配、长度惩罚等因素,以提升搜索精度。 除了...

    孔浩Lucene视频教程_留言项目源码

    《孔浩Lucene视频教程_留言项目源码》是一份珍贵的学习资源,旨在帮助开发者深入理解和实践Apache Lucene这一强大的全文搜索引擎库。孔浩老师,作为业界知名的IT教育专家,以其深入浅出的教学方式,使得复杂的Lucene...

Global site tag (gtag.js) - Google Analytics