Lucene 和 Solr 提交者 Grant Ingersoll 介绍了与相关性、分布式搜索和分面 (facet) 相关的最新 Lucene 和 Solr 功能。本文将学习如何利用这些功能构建快速、高效、可扩展的下一代数据驱动应用程序。
我 6 年前开始为 developerWorks 编写 Solr 和 Lucene。这些年来,Lucene 和 Solr 将自身建设成了一项坚不可摧的技术(Lucene 作为 Java API 的基础,Solr 作为搜索服务)。举例而言,它们支持着 Apple iTunes、Netflix、Wikipedia 等许多公司的基于搜索的应用程序,它们还帮助为 IBM Watson 答问系统提供支持。
多年来,大部分人对 Lucene 和 Solr 的使用主要集中在基于文本的搜索上。与此同时,新的、有趣的大数据趋势以及对分布式计算和大规模分析的全新(重新)关注正在兴起。大数据常常还需要实时的、大规模的信息访问。鉴于这种转变,Lucene 和 Solr 社区发现自己走到了十字路口:Lucene 的核心支柱开始在大数据应用程序的压力下呈现老态,比如对 Twittersphere 的所有消息建立索引。此外,Solr 在原生分布式索引支持上的匮乏,使得 IT 组织越来越难以富有成本效益的方式扩展他们的搜索基础架构。
该社区开始全面改革 Lucene 和 Solr 支柱(并在某些情况下改革公共 API)。我们的关注点已转向实现轻松的可伸缩性、近实时的索引和搜索,以及许多 NoSQL 功能 — 同时利用核心引擎功能。这次全面改革的结晶是 Apache Lucene 和 Solr 4.x 版本。这些版本首当其冲的目标是解决下一代、大规模、数据驱动的访问和分析问题。
本文将介绍 4.x 的要点功能并展示一些代码示例。但是首先,您将动手体验一个实用的应用程序,它演示了将搜索引擎用于搜索以外的用途的一些概念。要充分理解本文,您应熟悉 Solr 和 Lucene 的基础知识,尤其是 Solr 请求。
快速入门搜索和分析实战
搜索引擎仅用于搜索文本,对吧?不对!在其核心,搜索引擎关乎快速的、高效的过滤,然后依据某种相似性概念(一种在 Lucene 和 Solr 中灵活地定义的一个概念)对数据进行归类。搜索引擎还会有效地处理稀疏数据和模糊数据,这些数据是现代数据应用程序的标志性特征。Lucene 和 Solr 能够处理数字,分析复杂的地理空间问题(您很快会看到),等等。这些功能模糊了搜索应用程序与传统的数据库应用程序(以及甚至 NoSQL 应用程序)之间的界线。
例如,Lucene 和 Solr 现在:
支持多种类型的联接 (join) 和分组选项 拥有可选的面向列的存储 提供了多种方式来处理文本,处理枚举和数字数据类型 支持您定义自己的复杂数据类型、数据存储、归类和分析功能
一个搜索引擎不是所有数据问题的良方。但文本搜索在过去是 Lucene 和 Solr 的主要用途,这一事实不应阻止您使用它们解决现在或未来的数据需求。您可以考虑跳出众所周知的思维模式(搜索),以新的方式使用搜索引擎。
为了演示搜索引擎如何执行搜索以外的工作,本节剩余部分展示了一个将航空相关计数摄取到 Solr 中的应用程序。该应用程序将会查询数据(其中大部分是文本数据),并使用 D3 JavaScript 库处理它们,然后再显示它们。该数据集来自美国运输部运输统计局的研究与创新计数管理局 (RITA) 和 OpenFlights。该数据包含某个特定时间段的所有航班的一些详细信息,比如起飞机场、目标机场、晚点时间、晚点原因和航空公司信息。通过使用该应用程序查询此数据,您可分析特定机场之间的晚点、特定机场上的流量增长等信息。
首先让该应用程序正常运行,然后查看它的一些接口。在此过程中请牢记,该应用程序可通过各种方式查询 Solr 与该数据进行交互。
设置
首先,您需要满足以下先决条件:
Lucene 和 Solr。 Java 6 或更高版本。 一个现代 Web 浏览器。(我已在 Google Chrome 和 Firefox 上进行了测试。) 4GB
磁盘空间 — 如果不想使用所有航班数据,可使用更少的空间。 在 *nix 上使用 bash(或类似)shell 进行终端访问。对于 Windows,您需要使用 Cygwin。我仅在 OS X 上使用 bash shell 进行了测试。 wget,如果您选择使用示例代码包中的下载脚本来下载该数据。您也可以手动下载航班数据。 Apache Ant 1.8 及更高版本,用于编译和打包用途,如果您想要运行任何 Java 代码示例。
满足这些先决条件之后,执行以下步骤让应用程序正常运行:
下载 本文的示例代码 ZIP 文件,并将它解压到您选择的目录。我将此目录称为 $SOLR_AIR。 在命令行上,更改到 $SOLR_AIR 目录: cd $SOLR_AIR 启动 Solr: ./bin/start-solr.sh 运行创建用来建模该数据的必要字段的脚本: ./bin/setup.sh 在浏览器中打开 http://localhost:8983/solr/#/,以显示新的 Solr Admin UI。图 1 显示了一个示例:
图 1. Solr UI
在终端上,查看 bin/download-data.sh 脚本的内容,了解将要从 RITA 和 OpenFlights 下载的内容的详细信息。以手动方式或通过运行以下脚本来下载这些数据集: ./bin/download-data.sh
下载可能会花
大量时间,具体情况取决于您的带宽。 完成下载后,为部分或所有数据建立索引。
为所有数据建立索引: bin/index.sh
要为某一年中的数据建立索引,可使用 1987 到 2008 之间的任何值作为年份。
例如: bin/index.sh 1987 完成索引的创建之后(这可能会花费大量时间,具体情况取决于您的机器配置),在浏览器中打开 http://localhost:8983/solr/collection1/travel。您将看到一个类似图 2 的 UI:
图 2. Solr Air UI