
Preface 序言
Apache Solr是使用最广泛的全文检索解决方案,大部分网站都在使用Solr来实现搜索功能。然而国内关于Solr的资料太少,无奈我只能一点点地啃Solr官方提供的User Guide PDF文档、Solr Wiki以及一些纯英文的技术书籍,希望能够借由本书将我学习积累的所有经验倾情传授给那些由于学习Solr曲线太陡峭而束手无策的同学们。本书致力于帮助Java开发人员更简单、深入地学习Solr。同时本书还提供了随书源码,其中包含大量可运行的示例代码。本书与随书源码搭配在一起学习会事半功倍!由于目前大数据、云计算的发展如火如荼,各种大数据生态框架如雨后春笋般涌现,给人一种无形的压力。为此,本书也介绍了Solr与大数据框架的集成,如果你正好有这方面的需求,希望本书能够给你带来帮助。
为什么写这本书
转眼间,我已经跌跌撞撞走过了5个年头,由起初的那个Java迷途小书童变身为程序员届的一根老油条,不由感慨万千。由于深谙一个非高校毕业的“正规军”一路走来有多么的艰辛,因此我一直秉持爱开源、爱分享的个性。这么多年来帮助过的程序员太多太多,本着一颗乐于助人的心,我不想大家重走我的弯路。从2015年3月中旬开始,我在ITEye技术社区发布与Lucene和Solr相关的技术博客,深受大家喜爱。每天联系、咨询我问题的网友越来越多。疲于应付的我,开始意识到仅靠一个人这样一对一地指导是行不通的。而且刚好Solr这方面的中文技术书籍在中国还是一片空白,于是萌生了写一本Solr中文书籍的想法,希望能够帮助更多的Solr技术爱好者。
2015年8月我联系到了华章的杨福川,向他提出了写这本书的想法,得到了他的大力支持。我深知自己过往没有显赫耀眼的工作经历,在一些前辈面前还只是一个晚辈。因此,在创作本书的过程中,查阅了Solr官网提供的Apache-Solr-Ref-Guide、Solr Wiki,并通读了《Solr in action》《Apache Solr 4 Cookbook》《Apache Solr Essentials》《Apache Solr High Performance》等英文技术书籍。为了能够编写Solr与大数据集成相关章节,我又耗费了大量时间通读了《Apache Flume Distributed Log Collection for Hadoop》《Hadoop in Action》《HBase in Action》《Learning Spark》等大数据相关的英文技术书籍。写作本书的过程也成为本人学习提升的过程,为此我花费了整整1年的时间。资历尚浅仍可以通过自身努力来弥补,所以我时时刻刻以严谨缜密的态度对待写进书里的每一段文字,除了怀揣着对技术的一种敬畏之情,我知道我还必须为读者负责。
然而造化弄人,在2016年的2月份,我的颈部莫名其妙长了一个肿瘤,这严重影响了我的身心健康。由于辗转于北京协和医院、解放军总医院等地投医救治,所以这本书的编写工作不得不临时中断。还好我没有放弃,于是在修养了半年之后,又进入了“挑灯夜战”的状态,开始以夜继日地赶稿子。因为已经立下了写书的豪言壮志,所以再苦再累我也是要写完的!由于生病,当初所在的公司要求我立即停薪修养,在看尽了世态炎凉之后,我毅然选择了辞职,打算专职将这本书写好,给读者一个交代。没有了经济来源,只靠自己多年来的积蓄维持生活。我顶着巨大的压力,在大病初愈的情况下,决定倾注全部精力打造这本书。很庆幸我坚持下来了。每天叫醒我的不是闹钟不是鸡汤,也不是其他竞争对手,而是我的决心,因为父母已两鬓白发,快要三十的我还孑然一身。所以我不能虚度光阴,需要为了我爱的人和爱我的人努力奋斗,从而改善他们的生活。这本书也算是给自己30岁生日提前备下的一份礼物,并借以纪念不悔的青春岁月。我知道和我有着类似经历的同学太多太多,因此希望这本书能够为学习Solr的你们带来帮助和鼓励:定好一个Target,就永远不要放弃!
准备工作
随书提供了大量的示例代码(本书随书示例源码下载地址:https://github.com/yida-lxw/solr-book),其中涉及MongoDB、ZooKeeper、Hadoop、HBase、Flume、Kafka、Storm、Spark、Scala等知识点,不仅限于Solr,所以对于Java初学者而言会有一定压力。尽管书中提供了部分大数据框架的集群搭建步骤,但是由于篇幅的限制不可能面面俱到,你还是需要另外查阅其他相关书籍或资料来补充大数据这方面的知识。由于随书源码是基于Maven构建的,因此你还需要掌握Maven的基本使用方法。为了尽最大努力满足大部分用户的需求,所以从第14章开始我将以Solr 6.2.1版本为例进行讲解,而Solr6.x是要求JDK 1.8+版本的,那么在学习本书之前,你需要提前安装好JDK 1.7和JDK 1.8。如果你有将Solr部署在Tomcat下的需求,那么你还应安装Tomcat环境。对于企业而言,SolrCloud集群通常会部署在Linux环境下,因此本书SolrCloud部分是以CentOS 6.5为例进行讲解的,或许你还需要掌握Linux操作系统的基础知识以及一些Linux的常用命令。另外,由于Solr是基于Lucene构建的,因此你最好拥有一定的Lucene基础再来学习本书内容会感觉更轻松。因为本书自始至终是以由浅入深的原则进行编写的,尽量细致入微地讲解每一步。当然,Solr源码是使用Java编写的,这也要求你能够熟练掌握Java编程语言的知识,并拥有良好的编码基本功以及编程悟性。而Solr中的数据往往来自于关系型数据库,因此你最好是对关系型数据库有一定的了解。
如何阅读本书
全书分为上下两卷,总共16章,涵盖了Solr各个方面的知识点。本书从前到后按内容的难易程度以循序渐进的方式呈现出来。因此你只需要拥有足够的毅力将它阅读完,当然最好是能够边读边上机实践,就可以掌握Solr。此外每章之间都是相互独立的,如果你对于某章的内容已经非常熟悉,那么可以直接跳过选择感兴趣的章节进行学习。当然还是建议大家能够通读本书,系统学习Solr,这样才会对Solr有一个更完整的理解,为你日后从事Solr相关的开发工作打下夯实的基础。本书每章开头部分都列举了该章的主要知识点,可以让你快速了解本章能够学习到的内容。虽然本书中演示的示例代码在随书源码中都可以找到,但是我还是建议大家能够实际动手去敲一遍,毕竟只有亲手实践过,才能将遇到的各种问题真正悟透并彻底解决。这个过程虽是艰辛的,但也是深刻的,因为解决问题对于程序员来说就是积累经验的机会。
面向的读者
Java开发工程师;
架构师;
Solr技术爱好者;
各大高校或IT培训机构的学弟学妹们。
勘误与反馈
在编写本书的过程中,尽管我倾注了大量时间与精力,但是由于水平有限,书中难免会存在不足与疏漏之处,还请大家多多批评指正。如果你在阅读本书过程中有任何疑问或者建议需要向我反馈,可直接发送E-mail至736031305@qq.com或者添加个人微信(13476669029)联系我。
致谢
不知道你拿到这本书的时间是哪一年哪一个季节,但是对我来说,这都是我在自己30岁之前完成的一个最大的心愿。这是国内真真正正全面介绍Solr技术的第一本中文书籍,很开心我做到了。
想感谢的人很多,首先要谢谢爸妈,在我生病期间无微不至地照顾我,并无条件地支持我。
谢谢一路以来理解并鼓励我的朋友和粉丝们,是你们让我不断坚持前行。
谢谢机械工业出版社华章公司的杨福川、高婧雅、李艺在这一年当中对我写作的信任与帮助,没有你们辛勤的付出,就不可能有这本书的面市。非常开心和幸运能够与你们共同完成这样一本书籍。
谢谢我的Java启蒙老师习晨龙,是您带我进入了Java世界,从此我在汲取知识的路上甘之如饴。
谢谢在这么多年的工作中所有帮助过我的同事,我会一直记得你们。
最后需要感谢的还是我自己,感谢曾经的年少轻狂,感谢一直都存在的梦想,对于梦想我从来没有也永远不会放弃。所以如果你还有梦想,为了你爱的人,为了你自己,请永远不要放弃!