選單

基於 ElasticSearch 實現站內全文搜尋

基於 ElasticSearch 實現站內全文搜尋

摘要

對於一家公司而言,資料量越來越多,如果快速去查詢這些資訊是一個很難的問題,在計算機領域有一個專門的領域IR(Information Retrival)研究如果獲取資訊,做資訊檢索。在國內的如百度這樣的搜尋引擎也屬於這個領域,要自己實現一個搜尋引擎是非常難的,不過資訊查詢對每一個公司都非常重要,對於開發人員也可以選則一些市場上的開源專案來構建自己的站內搜尋引擎,本文將透過ElasticSearch來構建一個這樣的資訊檢索專案。

1 技術選型

搜尋引擎服務使用ElasticSearch

提供的對外web服務選則springboot web

1。1 ElasticSearch

Elasticsearch是一個基於Lucene的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放原始碼釋出,是一種流行的企業級搜尋引擎。Elasticsearch用於雲計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。

官方客戶端在Java、。NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其他語言中都是可用的。根據DB-Engines的排名顯示,Elasticsearch是最受歡迎的企業搜尋引擎,其次是Apache Solr,也是基於Lucene。1

現在開源的搜尋引擎在市面上最常見的就是ElasticSearch和Solr,二者都是基於Lucene的實現,其中ElasticSearch相對更加重量級,在分散式環境表現也更好,二者的選則需考慮具體的業務場景和資料量級。對於資料量不大的情況下,完全需要使用像Lucene這樣的搜尋引擎服務,透過關係型資料庫檢索即可。

1。2 springBoot

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”。2

現在springBoot在做web開發上是絕對的主流,其不僅僅是開發上的優勢,在佈署,運維各個方面都有著非常不錯的表現,並且spring生態圈的影響力太大了,可以找到各種成熟的解決方案。

1。3 ik分詞器

elasticSearch本身不支援中文的分詞,需要安裝中文分詞外掛,如果需要做中文的資訊檢索,中文分詞是基礎,此處選則了ik,下載好後放入elasticSearch的安裝位置的plugin目錄即可。

2 環境準備

需要安裝好elastiSearch以及kibana(可選),並且需要lk分詞外掛。

安裝elasticSearch elasticsearch官網。 筆者使用的是7。5。1。

ik外掛下載 ik外掛github地址。 注意下載和你下載elasticsearch版本一樣的ik外掛。

將ik外掛放入elasticsearch安裝目錄下的plugins包下,新建報名ik,將下載好的外掛解壓到該目錄下即可,啟動es的時候會自動載入該外掛。

在這裡插入圖片描述

搭建springboot專案 idea ->new project ->spring initializer

在這裡插入圖片描述

3 專案架構

獲取資料使用ik分詞外掛

將資料儲存在es引擎中

透過es檢索方式對儲存的資料進行檢索

使用es的java客戶端提供外部服務

基於 ElasticSearch 實現站內全文搜尋

在這裡插入圖片描述

4 實現效果

4。1 搜尋頁面

簡單實現一個類似百度的搜尋框即可。

基於 ElasticSearch 實現站內全文搜尋

在這裡插入圖片描述

4。2 搜尋結果頁面

在這裡插入圖片描述

點選第一個搜尋結果是我個人的某一篇博文,為了避免資料版權問題,筆者在es引擎中存放的全是個人的部落格資料。

基於 ElasticSearch 實現站內全文搜尋

在這裡插入圖片描述

5 具體程式碼實現

5。1 全文檢索的實現物件

按照博文的基本資訊定義瞭如下實體類,主要需要知道每一個博文的url,透過檢索出來的文章具體檢視要跳轉到該url。

5。2 客戶端配置

透過java配置es的客戶端。

5。3 業務程式碼編寫

包括一些檢索文章的資訊,可以從文章標題,文章內容以及作者資訊這些維度來檢視相關資訊。

5。4 對外介面

和使用springboot開發web程式相同。

5。5 頁面

此處頁面使用thymeleaf,主要原因是筆者真滴不會前端,只懂一丟丟簡單的h5,就隨便做了一個可以展示的頁面。

搜尋頁面

搜尋結果頁面

6 小結

上班擼程式碼,下班繼續擼程式碼寫部落格,花了兩天研究了以下es,其實這個玩意兒還是挺有意思的,現在IR領域最基礎的還是基於統計學的,所以對於es這類搜尋引擎而言在大資料的情況下具有良好的表現。每一次寫實戰筆者其實都感覺有些無從下手,因為不知道做啥?所以也希望得到一些有意思的點子筆者會將實戰做出來。

最近面試BAT,整理一份面試資料《

Java面試BATJ通關手冊

》,覆蓋了Java核心技術、JVM、Java併發、SSM、微服務、資料庫、資料結構等等。

文章有幫助的話,在看,轉發吧。

謝謝支援喲 (*^__^*)