利用Apache Lucene和Solr构建下一代数据驱动应用程序

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

时间: 2024-09-21 18:13:41

利用Apache Lucene和Solr构建下一代数据驱动应用程序的相关文章

使用Apache Lucene和Solr进行位置感知搜索

不管是通过支持 GPS 的智能手机查找最近的咖啡馆,还是通过社交站点查找附近的朋友,或是查看特定城市中运输某种商品的所有货车,越来越多的人和企业都使用位置感知的搜索服务.创建位置感知搜索服务通常属于昂贵的专用解决方案的一部分,并且一般由地理空间专家完成.不过,很流行的开源搜索库 Apache Lucene 和强大的 Lucene 搜索服务器 Apache Solr 最近添加了空间位置功能. 地理位置在空间搜索中至关重要!地理位置不仅在地产中至尊为王,将其用在搜索中还能帮助位于特定位置的用户快速找

Apache Lucene/Solr 3.3发布 基于Lucene的搜索服务器

Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇分两部分的文章中,Lucene Java 的提交人 Grant Ingersoll 将介绍 Solr 并向您展示如何轻松地将其表现优异的全文本搜索功能加入到 Web 应用程序中. 一旦用户需要某种信息,就可以立即搜索到这些信息,这种要求再也不是可有可无的了.随着 Google 和类似的复杂搜索引擎的出现,用户希望得到高质量的搜索结果,帮助他们快速.轻易地找到所需的信息.经理对您的h

【Spark Summit East 2017】使用Spark MLlib和Apache Solr构建实时实体类型识别系统

本讲义出自Khalifeh Aljadda在Spark Summit East 2017上的演讲,由于实体查询系统中的查询一般比较短,所以由于缺少上下文信息,所以不适合使用传统的bag-of-words模型来确定实体类型,本讲义介绍了一个新颖的实体类型识别系统,该系统使用Spark MLlib和Apache Solr构建,能够结合不同来源的线索来分析出需要查询实体.

手动利用Apache Ant构建部署自己的Java项目

虽然Eclipse从3.0开始已经继承了Ant插件,大家的项目可以自动构建 部署,此篇文章看也没多大用处,但是手动去自己使用以下 Ant来构建自己的Java项目也是一件有意义的事情,虽然现在已经没用人用Javac Java命令行的方式 来搞程序.... Ant是Apache基金项目下的一个工具,在Apache官方给出的解释 是      一个帮助我们构建软件的 Java库和命令行工具 . Apache Ant is a Java library and command-line tool tha

【原创】Lucene vs Solr

Lucene vs Solr  原文地址:这里 . 许多新接触 Lucene 和 Solr 的朋友会问这样的问题:我应该使用 Lucene 和 Solr 中的哪一个? 其实答案很简单:如果你是像上面那样问自己的,那么 99% 的情况下,你需要使用的是 Solr .  将 Solr 和 Lucene 之间的关系进行概念化类比,可以想象一下汽车和其内部的引擎.你无法直接驾驶引擎,但是你可以驾驶车.同样的道理,Lucene 是一种程序库,你无法直接跑起来,而 Solr 是一种完整应用,可以拿来就用. 

lucene 和 solr 简介以及区别

首先Solr是基于Lucene做的,Lucene是一套信息检索工具包,但并不包含搜索引擎系统,它包含了索引结构.读写索引工具.相关性工具.排序等功能,因此在使用Lucene时你仍需要关注搜索引擎系统,例如数据获取.解析.分词等方面的东西. Lucene更像是一个SDK. 有完整的API族以及对应的实现.你可以利用这些在自己的应用里实现高级查询(基于倒排索引技术的),Lucene对单机或者桌面应用很实用很方便.但是Lucene,需要开发者自己维护索引文件,在多机环境中备份同步索引文件很是麻烦.于是

《深入理解Elasticsearch(原书第2版)》一第1章Elasticsearch简介1.1 Apache Lucene简介

第1章 Elasticsearch简介 我们希望读者通过阅读本书来获取和拓展关于Elasticsearch的基本知识.假设读者已经知道如何使用Elasticsearch进行单次或批量索引创建,如何发送请求检索感兴趣的文档,如何使用过滤器缩减检索返回文档的数量,以及使用切面/聚合(faceting/aggregation)机制来计算数据的一些统计量.不过,在接触Elasticsearch提供的各种令人激动的功能之前,希望读者能对Apache Lucene有一个快速的了解,因为Elasticsear

《深入理解Elasticsearch(原书第2版)》——第1章 Elasticsearch简介 1.1 Apache Lucene简介

第1章 Elasticsearch简介 我们希望读者通过阅读本书来获取和拓展关于Elasticsearch的基本知识.假设读者已经知道如何使用Elasticsearch进行单次或批量索引创建,如何发送请求检索感兴趣的文档,如何使用过滤器缩减检索返回文档的数量,以及使用切面/聚合(faceting/aggregation)机制来计算数据的一些统计量.不过,在接触Elasticsearch提供的各种令人激动的功能之前,希望读者能对Apache Lucene有一个快速的了解,因为Elasticsear

《深入理解Elasticsearch(原书第2版)》——第2章 查询DSL进阶 2.1 Apache Lucene默认评分公式解释

第2章 查询DSL进阶 在上一章,我们了解了什么是Apache Lucene,它的整体架构,以及文本分析过程是如何完成的.之后,我们还介绍了Lucene的查询语言及其用法.除此之外,我们也讨论了Elasticsearch,讨论了它的架构,以及一些核心概念.在本章,我们将深入研究Elasticsearch的查询DSL(Domain Specific Language).在了解那些高级查询之前,我们将先了解Lucene评分公式的工作原理.到本章结束,将涵盖以下内容: Lucene默认评分公式是如何工