前言

我们正处在一个大数据时代,大数据并不仅仅是指海量数据,而更多的是指这些数据都是非结构化的、无法用传统的方法进行处理的数据。相信很多人听说过目前在云计算和大数据领域里如日中天的Hadoop, Hadoop的发起人之一是大名鼎鼎的Doug Cutting。早在Hadoop诞生之前,Doug Cutting已经用Java实现了第一个提供全文文本搜索的开源函数库Lucene。Lucene自2000年发布第一个开源版本以来,在开源社区引起了很大的反响,为广大开发者提供了研发全文检索系统的利器。Lucene作为Apache的顶级项目,有大量研发人员贡献源码,经过十几年的发展,目前Lucene已经十分成熟,可以说Lucene是当今最先进、最高效的全功能开源搜索引擎工具包。但Lucene只是一个全文检索类库,Elasticsearch是一个建立在Lucene基础上的实时的分布式搜索引擎,2010年由Shay Bano发布。相比于Lucene, Elasticsearch功能更加强大,使用更加方便。

站在巨人的肩膀上,入门搜索技术并不困难,本书为入门Lucene、Elasticsearch而生。本书首先介绍信息检索领域中的一些基本理论,也就是Lucene的数学模型,之后介绍如何使用Lucene库构建全文检索系统,最后介绍Elasticsearch。本书按照从数学模型到入门基础再到项目实战的思路来编写,数学模型让读者知其然也知其所以然,入门基础是理论到实际应用的必经之路,项目实战则是为了学以致用。书中的每一部分都力图简明扼要,使用大量实例和代码,为读者能够快速掌握全文检索技术扫除障碍。将全文检索领域中的一些知识和项目经验分享给大家,是笔者写作本书的初衷。

本书结构

本书从逻辑上可划分为三部分。

第一部分(第1章),主要介绍信息过载、信息检索、倒排索引、布尔模型、tf-idf、向量空间模型、概率检索模型等信息检索领域的基础知识。

第二部分(第2和3章),介绍如何使用Lucene开发全文检索系统。

第2章主要介绍Lucene的基础知识,内容包括Lucene的特点、Lucene架构、Luke的使用、IK分词器配置、扩展词库和远程词库的配置、Lucene的多种分词器、索引的构建方法、检索文档以及实现检索关键词高亮的方法。

第3章是Lucene项目实战部分,介绍如何使用Lucene构建一个文件检索系统,内容包括项目的整体设计、使用Tika做信息抽取、索引的构建、用户查询界面的设计与实现、用户查询处理、搜索结果展示等内容。

第三部分(第4~11章),主要介绍Elasticsearch分布式搜索引擎的相关技术。

第4章是Elasticsearch简介,内容包括Elasticsearch与Lucene的关系、Elasticsearch的整体架构、核心概念、在企业中的应用案例、流行度趋势、Elasticsearch的安装、中文分词配置以及相关插件的安装与使用。

第5章是Elasticsearch集群入门,主要内容包括索引管理、文档管理和映射详解。

第6章介绍Elasticsearch的搜索功能,主要内容包括搜索机制的解读、全文查询、词项查询、复合查询、嵌套查询、位置查询、特殊查询、搜索高亮和排序。

第7章介绍Elasticsearch的聚合分析功能。

第8章介绍如何使用Elasticsearch Java API做二次开发。

第9章介绍Elasticsearch集群管理的相关知识点,包括脑裂问题、集群规划、索引规划、分布式集群的搭建方法以及如何查看集群的监控信息。

第10章是Elasticsearch整合MySQL项目实战部分,通过实现对MySQL中的数据进行全文检索这一需求,贯穿了MySQL、JDBC、Elasticsearch Java API以及Java Web的相关知识,使读者了解在实际的项目开发中使用Elasticsearch做全文搜索的方法。

第11章介绍Elasticsearch和Hadoop大数据平台交互的方法。

学习本书的预备知识

Java基础

首先要配置好Java开发环境。不论是学习Lucene还是Elasticsearch都需要安装好Java环境,Elasticsearch的运行要求JDK版本最低为1.7,建议使用JDK 1.8及以上版本。鉴于Java的跨平台特性,对操作系统没有要求,在Windows、Linux、Mac OS X系统上都可以运行Elasticsearch。除此之外,读者需要掌握Java基础知识。

Java Web开发技术

在项目实战中需要用到Java Web的相关技术,建议读者在阅读本书之前掌握HTML、CSS、JSP等基础知识,掌握Java Web项目的部署和运行。

本书使用的软件版本

本书基于Lucene 6.0和Elasticsearch 5.4.0进行讲解,集成开发环境为Eclipse 4.6.1。

读者对象

在校学生

如果你是正在大学校园里修读计算机科学相关专业的大学生,也许你正在选修程序设计语言,课程结束了你发现自己只能写出命令行下黑白屏显示的小程序,你也许很期待学到更多的技术做出实际的项目,那么本书就是为你准备的。书中的项目使用的是Java语言,除了Lucene和Elasticsearch的使用之外,还穿插了Java SE、Java Web的相关技术。

Java程序开发者

如果你是已经参加工作的Java程序开发者,想要掌握全文检索相关技术却不知道从哪里入手,需要处理企业中的全文检索业务却没有思路,你也许听说过Lucene或Elasticsearch,但是不知道怎样快速入门,那么本书可以作为入门全文检索、学习Lucene和Elasticsearch开发技术的参考书。

搜索引擎研发人员

如果你是搜索引擎研发者,本书中的实际案例和相关知识点可以作为参考资料,比如信息检索模型理论基础、文档信息抽取、Lucene应用案例、Elasticsearch Java API、Elasticsearch集群管理等。希望能以本书为媒介和大家共同探讨和交流。

源代码下载

源代码下载地址:https://pan.baidu.com/s/1IHN6i86RRcua3cf5za5Ww(注意区分数字和英文字母的大小写)

勘误与交流

限于笔者水平和写作时间有限,不可避免地会有些疏漏之处,欢迎大家通过电子邮件等方式批评指正。

笔者的邮箱:ucasyp@163.com

笔者的博客:blog.csdn.net/napoay

QQ交流群:614836679

致谢

本书能够顺利出版要感谢很多单位和个人。首先要感谢笔者的家人,他们对笔者学业的支持和生活的照顾使笔者没有后顾之忧,全身心投入到本书的写作当中。

感谢北京博瑞开源有限公司,公司给笔者提供了宝贵的实习机会,本书的很多知识点都来源于实际项目,是在解决实际问题过程中的经验总结,感谢公司董事长李小翔先生、架构师黄超对笔者的指导和帮助。

感谢马玉鹏老师、郎睿师兄、张港红博士、CSDN博主周程(blog.csdn.net/fxsdbt520)、秦雪箭、宗鹏、陆风光在本书写作过程中的帮助和支持。

感谢启明星辰的张铭清女士在第二次印刷前对本书的指正和建议。

感谢清华大学出版社给了笔者一次和大家分享技术、交流学习的机会,感谢王金柱编辑在本书出版过程的辛勤付出。

中国科学院大学 姚攀

2018年5月4日