lucene为了能够是信息存储的空间更小,访问速度更快,用了一些小技巧,下面介绍一些技巧:
1. Prefix + Suffix
在保存Term Dictionary的时候,会保存几乎所有的词,这样索引文件会非常大,当某个词跟前面一个词拥有相同前缀的时候,后面的词仅仅保存前缀在词中得偏移,以及除了前缀之外的字符串。
比如存储如下几个词: term, termagancy, termagant, terminal .
按照正常的方法来存储,需要 4 + 10 + 9 + 8 = 29.
如果使用这个技巧, termagancy 被存储成 [4][a][g][a][n][c][y] 这样算下来一共使用了 4 + 7 + 2 + 5 = 18.
节省了 11 个char 的存储空间。
2. Delta
在lucene中需要保存很多整型的信息, 比如文档的id, Term的位置信息,当文档渐渐变多的时候,这些数字会越来越大,所占用的Byte也越来越多,Delta的意思就是两个整数,仅仅保存两个整数的差值.
比如: 5 9 11 存储为 5 4 2
3. markbit
某个值a后面可能存在b,也可能不存在, 需要一个标志位来表示是否存在b。
在lucene 中把a的值左移一位,空出最后一位作为标志位,表示后面是否跟随b,在这种情况下,a/2才是真正的值。
4. skip list
为了提高查询速度,lucene中有很多地方都是用了这种数据结构。
skip list 具有如下的特征:
1. 元素是按书序排列的,比如字母序或者从小到大。
2. 跳跃表是有间隔的,间隔是事先配置好的。
3. 跳跃表是有层次的,每一层指定间隔的元素构成上一层。
lucene中得定义:
间隔: 上层两个元素之差,再加一。
层数: 不包括原来链表层, 上面的层从0来时累加。
跳跃表比顺序查询,大大调高了搜索的效率.
比如查找元素72,应用跳表之后只需要访问第一层的50 ,然后发现50后面没有元素,然后访问第二层的94,然后访问原链表,找到72 ,只要访问3个元素即可。
相关推荐
它不仅介绍了Lucene的基本知识和使用技巧,还深入探讨了其实现原理和技术细节,为读者提供了一个全面而深入的学习资源。无论你是新手还是有经验的开发者,这本书都能够帮助你更好地掌握Lucene,从而在实际工作中发挥...
- **Lucene 的架构设计**:本书详细介绍了 Lucene 的核心架构,包括索引结构、存储机制以及查询处理流程。通过对这些基础概念的深入了解,读者可以更好地理解 Lucene 如何高效地进行文本搜索。 - **API 示例代码**...
- **索引存储**:将构建好的索引以一定格式存储起来,便于后续查询时快速访问。 - **查询处理**:根据用户的查询请求,在索引中查找匹配项,返回相关结果。 3. **索引文件格式**: - 该部分详细介绍了Lucene 3.0...
对于初学者或开发者而言,这是一个很好的学习资源,可以深入了解C#和Winform在实际项目中的应用,以及文档管理系统的设计思路和实现技巧。同时,源码的交流和分享也是IT社区的重要组成部分,有助于技术的传播和进步...
- **Lucene**: 高性能全文搜索引擎库,虽然不是Hadoop的一部分,但经常与Hadoop结合使用。 - **Hive**: 数据仓库工具,提供SQL-like查询语言(HQL),简化了非程序员对Hadoop数据的操作。 - **Pig**: 高级数据分析工具...
在ASP.NET中,开发人员可以用C#或VB.NET等编程语言编写代码,并且可以利用.NET Framework提供的各种服务,如数据访问、安全性、缓存等。 在这个多语种网络硬盘系统中,开发者可能使用了ASP.NET MVC(Model-View-...
- **管理界面**: 通过浏览器访问 Solr 提供的 Web 基础管理界面,可以进行配置文件查看、查询提交、日志设置、Java 环境设置等一系列操作。 - **分布式配置管理**: 介绍如何通过管理界面监控和控制分布式 Solr 配置...
- **全文索引结构(Full-text Indexing Structure):** 存储和组织抓取的文档,以便快速检索。 - **Lucene全文检索引擎:** 是一个高性能的开源全文检索库。 - **Nutch网络搜索软件:** 基于Hadoop的一个高度可...
- 全文检索:Sphinx、Lucene等。 #### 六、项目管理技巧 - **项目分类**:日常支持性工作、长期项目研发、底层研发等。 - **敏捷开发**:快速迭代、持续集成、每日站立会议等。 - **团队构成**:业务专家、项目...
- **内容发布**:将存储在数据库中的内容发布到Web服务器上供访问者查看; - **内容检索**:为用户提供搜索功能,便于查找所需信息。 **1.5 OpenCMS介绍** OpenCMS是一款开源的内容管理系统,它基于Java语言开发,...
- **过滤器功能**:过滤器进一步处理这些词汇单元,例如去除停用词或转换词汇单元的大小写。 - **自定义分析器**:Solr 允许用户根据需求定制自己的分析器链,从而更好地匹配特定的应用场景。 #### 八、Solr 性能...
缓存是一种提高系统性能的技术,通过将常用数据存储在内存中,减少对硬盘或网络资源的访问。Java中常见的缓存实现有Guava Cache和Spring Cache。面试时可能会考察如何设计缓存策略、缓存穿透、缓存雪崩和缓存更新...
1. **数据库设计**:数字图书馆的核心是其数据库,它存储着各种电子资源的信息,如书名、作者、出版社、出版日期、分类等。数据库设计通常包括概念设计、逻辑设计和物理设计,可能使用如SQL Server或MySQL等关系型...
Elasticsearch是一款基于Lucene的分布式、RESTful风格的搜索和数据分析引擎。它能够解决海量数据下的搜索问题,并且支持多种数据类型,如文本、数字、日期等。由于其高度可扩展性、高可用性和强大的搜索能力,...
### 开源企业搜索引擎SOLR的应用教程 #### 一、概述 Apache Solr 是一个功能强大的开源搜索服务器,...通过深入理解Solr的工作原理、配置方法和使用技巧,开发者可以充分发挥其潜力,为企业提供高效、可靠的搜索服务。
Apache Solr是一个高性能、可伸缩的开源搜索平台,基于Apache Lucene开发。它提供了企业级的全文搜索功能,包括自动完成、拼写检查、高亮显示和地理空间搜索等高级特性。Solr支持多种数据源,并能够处理大规模数据集...
大型数据库的设计与编程技巧 本人最近开发一个访问统计系统,日志非常的大,都保存在数据库里面。 我现在按照常规的设计方法对表进行设计,已经出现了查询非常缓慢地情形。 大家对于这种情况如何来设计数据库呢?...