移动端仍可深度探索的领域有哪些?点击看业内代表性技术方案及案例>> 了解详情
写点什么

Lucene 3.5 和 Solr 3.5:大幅降低内存用量、SearcherManager 和深度分页支持

  • 2012-02-02
  • 本文字数:2067 字

    阅读完需:约 1 分钟

Lucene 项目管理委员会宣布 Apache Lucene 3.5.0 和 Apache Solr 3.5.0 已经可以使用。Lucene 是一个高性能、支持全文搜索的文本搜索开发库。Solr 是一个独立的搜索服务器,其核心使用了 Lucene 来做索引和搜索。

Lucene 3.5.0 版本的主要变化包括:

  • 降低内存消耗。现在建立词汇索引需要的内存比以前降低了 3 到 5 倍,实现这一点,是使用了更有效的内存数据结构来保存词汇。
  • 深度分页支持。加入 IndexSearcher.searchAfter 方法,它在特定的 ScoreDoc 之后会返回结果。你可以将上一页的最后一个 document 传递给 searchAfter 方法,以得到下一页的结果。
  • SearcherManager。加入了 org.apache.lucene.search.SearcherManager 类,简化了在多个搜索线程中对 IndexSearcher 的分享和重新开启。底层的 IndexReader 实例如果不再被引用,可以安全关闭,其中使用了 IndexReader 的引用计数。还使用了获取方法来取得一个 IndexSearcher,还有释放方法来关闭取得的 IndexSearcher。
  • SearcherLifetimeManager。加入了 org.apache.lucene.search.SearcherLifetimeManager 类,提供跨越多个请求的索引的统一视图。它简化了服务多个请求的同一个 IndexSearcher 实例的使用,在分页或上下钻取搜索结果时,有更好的用户体验。
  • IndexWriter.optimize() 弃用。 IndexWriter.optimize 方法不再使用,并被重新命名为 forceMerge。这么做,是不再鼓励使用该方法,因此它的操作成本很高,而且只能在静态索引上使用。
  • IndexReader.reopen() 重命名。 IndexWriter.reopen 方法替代为 openIfChanged。如果索引没有变化,IndexReader.openIfChanged 会返回 null。一般来说,相对开启新的 IndexReader,该方法成本更低。
  • NGramPhraseQuery org.apache.lucene.search.NGramPhraseQuery 是 PhraseQuery 类,针对 n-gram 模型的查询做了优化。当使用 n-gram 分析时,可以加速查询速度 30%-50%。

可以访问 Lucene 3.5 发布说明来了解完整的变更列表。

Solr 3.5.0 的主要变化有:

  • Lucene 3.5.0。来自 Lucene 3.5.0 的缺陷修复和改进,主要是保持词汇索引需要的内存数量大幅减少。
  • 分布式结果分组。支持分布式搜索结果分组,也被称为 field collapsing。该特性限制了每“组”展示的文档数目,作为一个字段的唯一值定义,现在支持分布式搜索。
  • 语言检测。新的模块“langid”加入了在索引前检测文档语言的能力,以辅助正确决策。使用了 Apache Tika 的 LanguageIdentifier 或 Cybozu 的语言检测程序库,作为 UpdateRequestProcessor 实现。
  • 支持数字类型的sortMissingFirst 和 sortMissingLast。包括 Trie 在内的数字类型和日期类型现在支持 sortMissingFirst 和 sortMissingLast。
  • HunspellStemmerFilter。添加对 Lucene 的 HunspellStemmerFilter 支持,这样就可以支持 90 种语言的 stemming 词根缩减功能。Hunspell 本来是一个高级的拼写检查库,它因为用于 OpenOffice 套件而出名,现在在 Solr 中使用,提供 stemming 词根缩减。
  • hl.q 参数。加入了可选的 hl.q 参数,如果给定值,在 Highlighter(HighlightComponent 类)中会重写 q 参数。

可以访问 Solr 3.5 发布说明来了解完整的变更列表。

Yonik Seeley 是 Apache Solr 的创始人,同时也是 Lucid Imagination 的首席开源架构师和联合创始人,他回答了 InfoQ 针对本次 Lucene 和 Solr 发布的一些问题。

InfoQ:对于大部分 Lucene 和 Solr 的用户来说,这次发布能够让他们马上用起来的有哪些功能?

Yonik Seeley:Lucene 和 Solr 的用户可以受益于词汇索引大幅减少的内存用量、改进后的向量强调(vector highlighting)等等。Solr 还加入了对分布式分组的支持,提供针对缺少首值或末值的数字字段排序的能力。Lucene 还加入了对深度分页的优化。

InfoQ:您是否推荐开发人员使用默认的新 SearcherManager

Yonik Seeley:对于刚刚开发基于 Lucene 的项目的人来说,用新的 Lucene SearcherManager 是个好的开始,但是没必要把正常使用的自定义搜索的 manager 代码迁移过来。对于 Solr 的用户,searcher 的管理从一开始就是内部实现的细节了。

InfoQ:Lucene 和 Solr 3.6 有什么计划?

Yonik Seeley:在开源软件中很难说,因为没有正式的路线图。大部分的重大突破都发生在主干代码中,发布时自然就是 4.0 了。Lucene 已经完全更新了对索引机制,支持 codec。Solr 正在逐步转向使用 NoSQL data store,使用更先进的分布式索引功能。

InfoQ:我们什么时候才能看到带有 NRT 功能的 Solr 正式版发布?

Yonik Seeley:LucidWorks 是我们的 Apache Solr 的商业版本,基于主干代码的稳定版本(4.0-dev),具备 NRT 功能。至于这个功能何时移植回 Solr 3.x,现在还不清楚。Lucene 和 Solr 4.0 版本应该在 2012 年某个时候发布。

想对它们有所了解,您可以从 Apache 的镜像站点下载Lucene 3.5 Solr 3.5 。Maven 的用户要使用 Lucene,其 groupId 为 org.apache.lucene,artifactId 模式为 lucene-*,版本是 3.5.0。您也可以订阅 Lucene Solr 的邮件列表获取最新信息。

查看英文原文: Lucene 3.5 and Solr 3.5 - Substantial RAM Reduction, SearcherManager, Deep Paging Support

2012-02-02 04:016562
用户头像

发布了 479 篇内容, 共 140.5 次阅读, 收获喜欢 40 次。

关注

评论

发布
暂无评论
发现更多内容

(1-2/2)AI的落地:读caoz的文章有感

mtfelix

无限生长 2022Y300P

架构训练营 week4 作业

红莲疾风

「架构实战营」

微服务可观测平台(二)-链路跟踪&数据变更日志设计

中间件XL

canal 链路跟踪 服务日志 数据变更跟踪 zipkin

设计微博评论的高性能高可用计算架构

drizzle

「架构实战营」

Flutter 让你的Dialog脱胎换骨吧!(Attach,Dialog,Loading,Toast)

小呆呆666

flutter ios android 前端 大前端

Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据

万俊峰Kevin

微服务 stream go-zero Go 语言

世界女性科技群落(五):数字化黄金时代,东南亚女性都是隐藏的阿尔法

脑极体

什么是Log4Shell?Log4j漏洞解读

龙智—DevSecOps解决方案

log4j Log4j 2 Log4Shell

复习

IT蜗壳-Tango

1月月更

C++ 动态内存分配的问题,你都懂了吗?

小梁编程汇

c++ 堆内存管理 内存分配 smart pointer

面试官:为什么不同返回类型不算方法重载?

王磊

【Golang】浅谈协程并发竞争资源问题

恒生LIGHT云社区

golang 后端 协程 并发 Go 语言

【量化】量化交易入门系列3:经典的量化交易策略(中)

恒生LIGHT云社区

量化投资 量化交易 量化

LabVIEW纹理分析(基础篇—9)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 纹理分析

hw8-设计消息队列存储消息数据的MySQL表格

WWH

架构实战营

《张汉东的 Rust 实战课》学习笔记

贾献华

分布式系统必知必会

小梁编程汇

分布式 分布式系统 共识算法 分布式通信算法 #raft

编写Spring MVC控制器的技巧

编程江湖

Spring MVC

架构实战训练营-模块5-作业

温安适

「架构实战营」

一份简单够用的 Nginx Location 配置讲解

冴羽

nginx 后端 博客 后端开发 博客配置

写时复制技术(COW)详解

小梁编程汇

性能优化 操作系统 CopyOnWrite;

Kafka原理——Kafka为何如此之快?

Kafka中文社区

盘点 2021|考研,裸辞——混乱中寻找秩序,2021后记

某个Coder

盘点 2021

川大记忆

wood

300天创作 川大

ReactNative进阶(一):ReactNative 学习资料汇总

No Silver Bullet

React Native 1月月更

(1-1/1)底层逻辑读后感:三种对错观四类表述

mtfelix

无限生长 2022Y300P

盘点 2021|一个普通人的不普通的2021

慕枫技术笔记

程序人生 盘点 2021

【LeetCode】统计特殊四元组Java题解

Albert

算法 LeetCode 1月月更

数据库批量插入这么讲究的么?

秦怀杂货店

Java 数据库 批量插入

netty系列之:选byte还是选message?这是一个问题

程序那些事

Java Netty 程序那些事 UDT 1月月更

Lucene 3.5和Solr 3.5:大幅降低内存用量、SearcherManager和深度分页支持_Java_Bienvenido David_InfoQ精选文章