我們正處在一個大數據時代,大數據並不僅是指巨量資料,而更多的是指這些資料都是非結構化的、無法用傳統的方法進行處理的資料。相信很多人聽說過目前在雲端運算和大數據領域裡如日中天的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叢集管理等。希望能以本書為媒介和大家共同探討和交流。