Apache Solr:基于 Lucene 的高伸缩性企业搜索服务器

  • James Kao
  • 郭晓刚

2007 年 6 月 19 日

话题:JavaSOARuby语言 & 开发架构

基于 Lucene 的Apache Solr企业搜索服务程序,它以可移植的 war 文件的形式发布,提供了立等可用的索引和查询功能。用户通过 HTTP 界面与 Solr 交互,用 XML 文档和 HTTP GET 参数向 Solr 提交索引内容和进行查询。Solr 还提供了主 - 从索引复制机制,以便在大规模的应用中分散查询负载。

Solr 最初是由 CNET Networks 开发的,后来在 2006 年被捐赠给了 Apache 软件基金会。目前它已被几个高流量的公众网站用作搜索程序。社区对其的反应也很好,有用户报告说在索引了高达数百万个文档的情况下,Solr 仍然维持良好的性能表现。

Solr 的特性可以分成以下几类:

Schema

  • 定义文档中的索引域(field)和索引域类型
  • 动态索引域功能,可以随时增加新索引域
  • 显式类型消除了猜测索引域类型的需要
  • 停止词(stopword)表、同义词表和保护词表的配置被放到外部文件中
  • 多个新增的文本分析组件,包括分词、正则表达式过滤器和近似读音过滤器

查询

  • HTTP 界面和可配置的应答格式(XML/XSLT、JSON、Python、Ruby)
  • 可按任意数量的索引域排序
  • 查询词高亮的上下文片断
  • 固定的评分范围和前缀查询——没有 idf、coord 或 lengthNorm 因子,也没有限制查询所匹配的关键词数量
  • 函数查询——评分受到索引域的的数值取值或次序的函数影响
  • 日期计算——查询和更新中的日期可用与当前日期的差值来指定

核心

  • 可插拔的查询处理器和可扩展的 XML 数据格式
  • 由唯一索引主键确保的文档唯一性
  • 批量更新和删除,以确保高性能
  • 由索引变更所触发的命令,用户可对其进行配置
  • 能正确处理用于排序和范围查询的数值类型

缓存

  • 可插拔的缓存实现
  • 在后台对缓存的“自动预热(Autowarming)”(当前搜索器最后访问的缓存内容将被自动填充进新搜索器的缓存,以在索引 / 搜索器变更时获得更高的缓存命中率)
  • 快速 / 轻量的过滤器实现
  • 带有“自动预热”功能的用户级缓存

复制

  • 通过远程同步(rsync)传输高效分发变化了的索引片段
  • 主动获取(Pull)策略,令搜索器的增加变得简捷
  • 可配置的分发周期,允许在及时性和缓存利用率之间获得平衡

管理界面

  • 对缓存利用率、更新和查询的全面统计信息
  • 文本分析调试器,可显示文本分析器每一阶段的结果
  • 带调试输出的 Web 查询界面

月初发布的 1.2 版增加了以下新特性:

这是 Solr 孵化成功后的第一次发布,这次发布带来了很多新特性,包括从 CSV/ 分割文本加载数据、定时自动提交、更快的词素划分(faceting)、反向过滤器(negative filter)、拼写检查处理器、近似读音词汇过滤器、正则表达式文本过滤器,以及更多的灵活的插件。

developerWorks 上最近发表的两篇系列文章详细介绍了 Solr 的安装、配置、使用和调优的全过程。

查看英文原文:Apache Solr: Lucene Based Server Provides Highly Scalable Enterprise Search

JavaSOARuby语言 & 开发架构