最近因業務中需要對數據庫裡面的數據進行多維度檢索,完全依賴SQL已經無法滿足業務的需求了,顯然我們需要搜索技術的支持。這玩意也沒啥可技術調研的,基本上就如下幾種方案:
- 自己搭建搜索引擎,採用ElasticSearch
- 自己搭建搜索引擎,採用Solr
- 使用雲服務,使用阿里雲的開放搜索產品或者ES產品
業務場景:
- 不需要數據實時同步
- 數據量小、訪問頻次低,因此單機即可
- 能提供各個字段的多維度模糊查詢
- 能簡單快速上手,容易維護
- 成本低
基於以上場景,基本上就pass掉了使用雲服務,因為它真的不便宜,最便宜的阿里雲開放搜索或者ES產品也得1元/小時,也就是一個月720元,一年8640元,這還只是一個搜索應用,如果有多個費用會更多,所以我們還是選擇自建吧。那就需要考慮到運維成本的問題了,要能簡單快速上手且易於維護,所以我最終選擇了solr。
本文主要詳細說明solr的搭建步驟,建議大家收藏文章後,跟著文章自己動手再搭建一次,以便掌握solr的相關知識。
solr官網:https://lucene.apache.org/solr/
Solr is the popular, blazing-fast, open source enterprise search platform built on Apache Lucene™.
Solr是基於Apache Lucene™構建的流行的、速度極快的開源企業搜索平臺。
下載&解壓
<code>//下載最新版8.4.1
wget http://mirror.bit.edu.cn/apache/lucene/solr/8.4.1/solr-8.4.1.tgz
//解壓到solr-8.4.1
tar xzf solr-8.4.1.tgz/<code>
解壓後的文件目錄如下:
啟動solr服務
<code>#啟動solr
sh bin/solr start -force/<code>
可能會出現啟動失敗的情況:
<code>bin/solr: line 739: syntax error near unexpected token `bin/solr: line 739: ` done < /<code>
這是可能端口被佔用了,換一個指定端口啟動:
<code>./bin/solr start -p 8983 -force/<code>
輸出日誌:
這樣就啟動成功了,訪問8983的控制檯http://127.0.0.1:8983(注意檢查服務器端口8983是否開放狀態):
這樣我們的solr就安裝成功了。
配置Solr Core
可以看到提示說創建Core之前,instanceDir和dataDir文件夾必須已經存在。那麼我們就先創建好對應的文件夾,記住這個目錄:solr-8.4.1/server/solr,我們會在這個目錄下創建core所屬的instanceDir,而dataDir則在instanceDir目錄下,可以拷貝configsets/_default/conf/目錄下的所有文件到新建的core下面:
<code>cp -r configsets/_default/conf/ test_rong_msg_history//<code>
然後回到管理頁面執行Create Core,創建好我們的Core:
配置中文分詞器
因為我們需要對中文內容進行模糊查詢、匹配,則需要單獨配置中文分詞器,下載ik-analyzer-8.3.0.jar,最好與自己的solr版本對應:
<code>wget https://repo1.maven.org/maven2/com/github/magese/ik-analyzer/8.3.0/ik-analyzer-8.3.0.jar/<code>
下載完畢後放到server/solr-webapp/webapp/WEB-INF/lib目錄下,再回到我們剛剛創建的Core目錄下,編輯managed-schema文件,增加如下內容:
重啟solr:
<code>bin/solr restart -force/<code>
去solr控制檯測試一下中文分詞,選擇text_ik進行分析,可以看到IKT的分詞結果:
也可以自定義分詞,比如我們想將“測試中文分詞”中的“中文分”單獨作為一個詞來分詞的話,那麼可以如下操作:
1.解壓ik-analyzer-8.3.0.jar,執行jar -xvf ik-analyzer-8.3.0.jar得到如下文件目錄:
2.將ext.dic、stopword.dic、IKAnalyzer.cfg.xml三個文件拷貝到solr-8.4.1/server/solr-webapp/webapp/WEB-INF/classes目錄下(沒有classes目錄mkdir一下):
3.其中ext.dic就是我們自定義的中文詞,將“中文分”加到這個文件中去,重啟solr,再試試分詞效果:
可以看到,“中文分”已經作為一個詞被solr拆出來了。
數據源配置DataImport
我們使用solr的目的就是為了更方便、更多維度、更快速度的檢索數據,而數據都會存儲在數據庫中,所以就需要我們將數據庫中的數據及時的導入到solr搜索引擎中,便於業務搜索。
依賴jar包下載到dist文件夾對應目錄下:
編輯配置文件test_rong_msg_history/conf/solrconfig.xml新增如下內容:
在conf目錄下新增data-config.xml,主要是為了配置連接mysql數據庫的數據源信息:
數據源配置好了,接下來回來solr控制檯,在控制檯選擇我們之前添加的core,配置其schema,也可以直接編輯managed-schema文件來配置field:
至此,配置工作完成,開始講數據庫中的數據導入到solr中來,執行Dataimport:
可以看到從數據庫中導入了112條記錄到solr,這個時候執行Query,發現可以查詢數據了:
這樣我們便完成了從mysql導入數據到solr的配置工作,大家便可以根據solr的相關查詢API來開發自己的業務了。
以上就是solr的搭建、配置中文分詞、配置數據源的詳細步驟說明,建議大家感興趣的可以自己在本地動手搭建一下,相信大家自己搭建後,不僅初步掌握了solr搜索引擎的基礎知識,還會獲得更多其他的收穫。
閱讀更多 java架構設計 的文章