前言
我們正處在一個大數據時代,大數據並不僅是指巨量資料,而更多的是指這些資料都是非結構化的、無法用傳統的方法進行處理的資料。相信很多人聽說過目前在雲端運算和大數據領域裡如日中天的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 說明,整合式開發環境為Eclipse4.6.1。
✤ 適合讀者群
在校學生
如果你是正在修讀電腦資訊相關科系的大學生,也許你正在選修程式語言,課程結束發現自己只能寫出命令列下黑螢幕顯示的小程式,你也許很期待學到更多的技術做出實際的專案,那麼本書就是為你準備的。書中的專案使用的是Java 語言,除了Lucene 和Elasticsearch 的使用之外,還穿插了Java SE、JavaWeb 的相關技術。
Java 程式開發者
如果你已是Java 程式開發者,想要掌握全文檢索相關技術卻不知道從哪裡入手,需要處理企業中的全文檢索業務卻沒有想法,你也許聽說過Lucene 或Elasticsearch,但是不知道怎樣快速入門,本書可以作為入門全文檢索、學習Lucene 和Elasticsearch 開發技術的參考書。
搜尋引擎研發人員
如果你是搜尋引擎開發者,本書中的實際案例和相關基礎知識可以作為參考資料,例如資訊檢索模型理論基礎、文件資訊取出、Lucene 應用案例、Elasticsearch Java API、Elasticsearch 叢集管理等。希望能以本書為媒介和大家共同探討和交流。
✤ 原始程式碼下載
原始程式碼可在本公司官網下載,提供原書簡體中文版及繁體中文版兩版本,讀者在執行繁體中文版如果出現問題,可以使用原書之簡體中文程式碼。
✤ 勘誤與交流
限於筆者功力及寫作時間有限,不可避免地會有些疏漏之處,歡迎大家透過電子郵件等方式批評指正。
筆者的電子郵件:ucasyp@163.com
筆者的部落格:blog.csdn.net/napoay
✤ 致謝
本書能夠順利出版要感謝很多單位和個人。首先要感謝筆者的家人,他們對筆者學業的支援和生活的照顧使筆者沒有後顧之憂,全身心投入到本書的寫作當中。
感謝北京博瑞開放原始碼有限公司,為筆者提供了寶貴的實習機會,本書的很多基礎知識都來自實際專案,是在解決實際問題過程中的經驗歸納,感謝董事長李小翔先生、架構師黃超對筆者的指導和幫助。
感謝馬玉鵬老師、郎睿師兄、張港紅博士、CSDN 博主周程(blog.csdn.net/fxsdbt520)、秦雪箭、宗鵬、陸風光在本撰寫作過程中的幫助和支援。
感謝清華大學出版社給筆者一次和大家分享技術、交流學習的機會,感謝王金柱編輯在本書出版過程的辛勤付出。
姚攀