InfoQ

新闻

Lucene 2.2发布:加入词条载荷、函数查询及性能提升

作者 Ryan Slobojan译者 张海龙 发布于 2007年7月11日 上午12时30分

社区
Java
主题
开放源代码,
搜索
标签
Lucene

Lucene Java 2.2已经可以使用啦!Lucene是一个完全由Java编写的高性能、全特性的全文检索引擎库。在这一版中有许多新特性,其中包括:

  • 词条载荷(payloads)——允许用户将任意二进制数据和索引中的任意词条(term)相关联;
  • 函数查询(function queries)——为文档匹配度(score)的计算方式提供更高的可控性(从Solr中并入);
  • 通过NFS进行“瞬间(point-in-time)”查询——将类似于快照的功能引入NFS
  • 用来操作预分析字段的新API——可以让用户操作预先分析的文档字段而无须另加空分析器代码;
  • 公开的Maven发行版——Lucene最新版本中的所有模块都可以通过Maven Repository获得。

InfoQ采访了Lucene项目的代码贡献人及项目管理委员会(Project Management Committee,PMC)成员Grant Ingersoll,进一步了解了这个发布版。在谈话过程中,Ingersoll希望InfoQ注明他所说的观点和意见都属于个人性质,不代表Lucene PMC的官方观点。

InfoQ了解到,Lucene 2.2的发布标志着该项目的发布周期朝着一个更短的按季度发布的方向飞跃。Ingersoll相信更频繁的发布会带来很多的好处,比如说使为社区提供Bug修复和新特性变得更快。发布过程也因为得到Maven的支持而变得更加有效率,因此未来Maven用户将能更快速地获得发布版本。

InfoQ请Ingersoll详细地描述了词条载荷的特性,他说:

词条载荷是一个允许信息在索引中按逐词条储存的新特性。例如,当索引Web页面时,储存某个关键词的额外信息可能会很有用,例如这个关键词关联的URL或者经过文字分析后得出的权重系数。在更高级的应用中,为了突出语句中的名词成分相对于其它成分的重要性,储存语句中这个关键词出现的部分可能会很有帮助。我今年在ApacheCon Europe会议上的演讲中就有几张讲述词条载荷的幻灯片,感兴趣的读者可以去看看。

他还描述了源于Solr的新的函数查询功能:

新的搜索函数包(org.apache.lucene.search.function)允许开发人员在计算文档相关度使用某个字段的实际内容。例如,如果你在文档的字段中储存精度和纬度信息,你就可以使用这些字段中的信息影响文档的排名。就是说,如果你搜索星巴克,你可以在结果中将离用户较近的分店(假定你知道用户的地点)排在较远分店的前面。另一个例子是使用价格或者利润信息来影响排名(即给能为公司带来更大利润的产品打更高的评分,并不是说道义上我同意这样做,但它确实可以做到)。

随后,在Ingersoll被问到用户对Lucene的后续版本会有什么期望时,他指出,在使用了Michael McCandless领导的几项新的内存管理技术之后,索引性能将会得到显著提升。他还提到,在最近发布的Lucene中已经加入了不少性能改善,用户可以自己去体验一下这些变化。最后,Ingersoll说,对Java 5的支持和更灵活的索引过程将是Lucene未来可能出现的特性。

这一版提供了一个全面的更新日志,列出了这个版本中所有已修复的Bug、特性和优化情况。和以前的版本一样,2.2版也可以读取和导入以前版本的索引,不过一旦进行了转换,索引将不能被以前的版本(如2.1版)使用。

查看英文原文:Lucene 2.2: Payloads, Function queries, and more speed

相关赞助商

InfoQ中文站Java社区,关注企业Java社区的变化与创新,通过新闻、文章、视频访谈和演讲以及迷你书等为中国Java技术社区提供一流资讯。

1 条回复

回复

point-in-time 发表人 Xiaogang Guo 发表于 2007年7月11日 下午8时54分
  1. 返回顶部

    point-in-time

    2007年7月11日 下午8时54分 发表人 Xiaogang Guo

    “point-in-time”让IndexReader在index被更新的同时仍然能够进行查询(虽然多个IndexWriter同时更新的问题还没解决),但这也意味着IndexReader看不到在它open之后更新的内容,因此你需要不时re-open IndexReader以保持查询结果的更新。可用IndexReader.isCurrent()来检测是否需要re-open。目前开发社区正考虑避免依赖文件系统的语义来实现该功能,这可以避免许多由于文件系统的差异而带来的问题。

独家内容

运用Ruby纤程进行异步I/O:NeverBlock和Revactor

Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。

与杨巍一起探讨OpenSocial

InfoQ中文站有幸与Google中国的产品经理杨巍先生在一起探讨了OpenSocial的相关话题,包括OpenSocial的初衷、构成要素、实现方式、以及要实现它的技术储备等等。

书评:敏捷模式──指向成功的路标

Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。

构建的可伸缩性和达到的性能:一个虚拟座谈会

这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。

OpenSocial的分析与实现

本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。

缓存系统MemCached的Java客户端优化历程

Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。

超越SOA:动态业务应用的新企业应用框架(2)

在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。

使用ClickOnce细分发布版本

ClickOnce让WinForms应用程序的部署轻而易举。David Cooksey演示了如何在ASP.NET中编写一个HttpHandler来实现对ClickOnce部署的版本细分。