分布式--solr搜索引擎

一甜奄、簡介

搜索是項(xiàng)目中常用的功能哼丈,對于大數(shù)據(jù)量的搜索,查詢關(guān)系型數(shù)據(jù)庫是非常低效的靶擦,好在有三方專門用于搜索的工具,常用的搜索解決方案為:

  • 基于Apache Lucene實(shí)現(xiàn)
  • 基于百度API實(shí)現(xiàn)
  • 基于谷歌API實(shí)現(xiàn)

solr基于Lucene實(shí)現(xiàn)雇毫,本質(zhì)是一個(gè)Java Web項(xiàng)目奢啥,并集成了Jetty服務(wù)器,Jetty和Tomcat差不多嘴拢,也是一個(gè)JavaWeb容器,我們客戶端只需要通過調(diào)用solr控制器寂纪,solr處理完后返回?cái)?shù)據(jù)

反向索引

搜索使用反向索引將大大提高搜索效率席吴,正向索引與反向索引的區(qū)別如下:

  • 正向索引:將查找內(nèi)容分詞赌结,后根據(jù)分詞完的詞組,挨個(gè)進(jìn)行搜索:
  • 反向索引:內(nèi)容存入數(shù)據(jù)源的同時(shí)進(jìn)行分詞孝冒,搜索時(shí)直接根據(jù)詞組搜索:

solr搜索原理

solr就是利用了反向索引柬姚,將搜索內(nèi)容分詞后,直接和存儲內(nèi)容的索引進(jìn)行匹配:

solr擁有自己的數(shù)據(jù)庫庄涡,以Document作存儲

二量承、solr安裝

前面提到過solr是Java Web項(xiàng)目,所以需要先裝好JDK
官網(wǎng)下載:https://solr.apache.org/downloads.html

1. 解壓

下載傳入服務(wù)器后穴店,解壓:

tar xvf solr-8.11.2.tgz

2. 移動

移動到/usr/local目錄下:

mv ./solr-8.11.2 /usr/local/

3. 修改啟動參數(shù)

cd /usr/local/solr-8.11.2/bin/
vi solr.in.sh

找到SOLR_ULIMIT_CHECKS并修改:

SOLR_ULIMIT_CHECKS=false

4. 啟動solr

如果是root用戶撕捍,需要加上-force

./solr start -force

啟動成功:

三、可視化管理界面

訪問服務(wù)器8983端口可以進(jìn)入solr的可視化管理界面:

  1. 整體信息
  2. 日志
  3. 安全性相關(guān)
  4. 核心泣洞。類似數(shù)據(jù)庫DataBase
  5. Java信息
  6. 線程相關(guān)
  7. 如果有核心忧风,將在此處顯示

四、創(chuàng)建核心

solr安裝完后球凰,直接在界面上添加核心會報(bào)錯狮腿,需要進(jìn)行一些配置

1. 復(fù)制配置文件

cd /usr/local/solr-8.11.2/server/solr
mkdir test_core
cp -r configsets/_default/conf/ test_core/

2. 創(chuàng)建核心

instanceDir需要和上面創(chuàng)建的文件夾名一致,確認(rèn)信息后呕诉,點(diǎn)擊Add Core

等待創(chuàng)建結(jié)束后缘厢,下方就可以選擇核心了:

四、中文分詞配置

solr默認(rèn)對中文只會按照每個(gè)字進(jìn)行分詞:

如果想要獲得中文較好的支持甩挫,需要使用ik-analyzer.jar包贴硫,下載地址:https://search.maven.org/search?q=com.github.magese,注意對應(yīng)solr大版本

1. 導(dǎo)入jar

將下載完后傳入服務(wù)器捶闸,并移動到/usr/local/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib目錄下:

 mv ik-analyzer-8.5.0.jar  /usr/local/solr-8.11.2/server/solr-webapp/webapp/libs/

2. 修改配置文件

上面提到solr使用Document存儲夜畴,Document包含的屬性和屬性類型都定義在managed-schemel中,爭對中文的分詞删壮,我們需要自定義一個(gè)屬性并賦予它類型

編輯對應(yīng)核心的managed-schemel文件贪绘,/usr/local/solr-8.11.2/server/solr/test_core/conf目錄下:

cd /usr/local/solr-8.11.2/server/solr/test_core/conf
vi managed-schema
2.1 添加屬性

schema標(biāo)簽包裹區(qū)域內(nèi)添加:

    <!--定義屬性,type表示屬性類型 indexed表示是否建立索引  stored表示是否顯示給用戶-->
    <field name="_china_" type="text_ik" indexed="true" stored="true" />
2.2 添加屬性類型

和剛剛導(dǎo)入的jar包進(jìn)行關(guān)聯(lián):

    <fieldType name="text_ik" class="solr.TextField">
            <analyzer type="index">
                    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
                    <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
            <analyzer type="query">
                    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
                    <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
    </fieldType>

3. 重啟solr

cd /usr/local/solr-8.11.2/bin
./solr stop -all
./solr start -force

在界面上使用_china_進(jìn)行分詞:

4. managed-schema說明

標(biāo)簽 屬性 描述
< fieldType/> 定義屬性類型
< field/> 定義屬性
name 屬性名稱
type 屬性的類型
indexed 該屬性是否建立索引央碟,即可以通過分詞的詞組被查找
stored 該屬性是否需要返回給搜索用戶税灌,并不是所有屬性都要展示
required 該屬性是否必須
multiValued 該屬性是否為復(fù)合屬性,即屬性中還有其他屬性
< copyField/> multiValued搭配使用亿虽,用于表示符合屬性中使用的多個(gè)屬性
source 指定關(guān)聯(lián)的屬性名
dest 指定復(fù)合屬性名
< uniqueKey/> 唯一主鍵屬性
< dynamicField/> 定義動態(tài)屬性菱涤,name通過通配符進(jìn)行配置,可以表示多個(gè)屬性

五洛勉、DataImport

接著我們將本地?cái)?shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到solr中粘秆,使用的是solr的dataimport,將dept部門表數(shù)據(jù)導(dǎo)入收毫,SQL的創(chuàng)建在MyBatis--初入MyBatis中可以找到

1. 準(zhǔn)備屬性

managed-schema中定義與本地?cái)?shù)據(jù)庫字段相對應(yīng)的屬性:

cd /usr/local/solr-8.11.2/server/solr/test_core/conf
vi managed-schema

默認(rèn)的一些屬性類型可以在界面中查找:

部門表對應(yīng)的屬性:

    <field name="deptno" type="pint" indexed="false" stored="true"/>
    <field name="dname" type="text_general" indexed="true" stored="true"/>
    <field name="loc" type="text_ik" indexed="true" stored="true"/> 

2. 新建配置文件

在同一個(gè)目錄下新建配置文件攻走,用于連接數(shù)據(jù)庫以及做數(shù)據(jù)庫字段和屬性的映射:

vi data-dept.xml

內(nèi)容為:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
        <dataSource type="JdbcDataSource"
                driver="com.mysql.jdbc.Driver"
                url="jdbc:mysql://192.168.42.170:3306/mydb?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;tinyInt1isBit=false"
                user="root"
                password="root"/>
        <document>
            <entity name="dept" query="select * from dept">
                <!--
                 實(shí)現(xiàn)數(shù)據(jù)庫的列和索引庫的字段的映射
                 column 指定數(shù)據(jù)庫的列表
                 name  指定索引庫的字段名字殷勘,必須和managed-schema中定義的一樣
                 -->
                 <field column="deptno" name="deptno"/>
                 <field column="dname" name="dname"/>
                 <field column="loc" name="loc"/>
            </entity>
         </document>
</dataConfig>

3. 配置solrconfig.xml

vi solrconfig.xml

config標(biāo)簽包裹中添加DataImport的使用:

 <!-- 配置數(shù)據(jù)導(dǎo)入的處理器 -->
  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <!--  加載data-dept.xml  -->
      <str name="config">data-dept.xml</str>
     </lst>
  </requestHandler>

4. 導(dǎo)入jar包

還需要將兩個(gè)jar包導(dǎo)入到\WEB-INF\lib目錄中:

cd /usr/local/solr-8.11.2/dist
cp solr-dataimporthandler-* /usr/local/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib

以及mysql的數(shù)據(jù)庫驅(qū)動,下載后上傳到服務(wù)器昔搂,再移動到\WEB-INF\lib目錄中:

cp mysql-connector-java-8.0.29.jar /usr/local/solr-8.11.2/server/solr-webapp/webapp/WEB-INF/lib

5. 重啟solr并導(dǎo)入數(shù)據(jù)

cd /usr/local/solr-8.11.2/
./solr stop -all
./solr start -force

界面上點(diǎn)擊執(zhí)行:

如果出錯玲销,可以查看/usr/local/solr-8.11.2/server/logs/solr.log的日志:

tail -f solr.log

我這邊遇到的是mysql連接不上,修改mysql的user表摘符,將root用戶Host改為%

查詢下數(shù)據(jù)贤斜,發(fā)現(xiàn)已經(jīng)導(dǎo)入了:

六、solr集群搭建

solr內(nèi)置了集群功能逛裤,是基于zookeeper實(shí)現(xiàn)的瘩绒,啟動集群非常便利

1. 開啟集群

執(zhí)行開啟集群命令,可以使用-noprompt表示默認(rèn)配置:

./solr -e cloud [-noprompt] -force

完成后别凹,會創(chuàng)建兩個(gè)node目錄:

2. 重啟

./solr start -c -p 8983 -s ../example/cloud/node1/solr/ -force
./solr start -c -p 7574 -z localhost:9983 -s ../example/cloud/node2/solr/ -force
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末草讶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炉菲,更是在濱河造成了極大的恐慌堕战,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍霜,死亡現(xiàn)場離奇詭異嘱丢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)祠饺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門越驻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人道偷,你說我怎么就攤上這事缀旁。” “怎么了勺鸦?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵并巍,是天一觀的道長。 經(jīng)常有香客問我换途,道長懊渡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任军拟,我火速辦了婚禮剃执,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘懈息。我一直安慰自己肾档,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布辫继。 她就那樣靜靜地躺著阁最,像睡著了一般戒祠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上速种,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音低千,去河邊找鬼配阵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛示血,可吹牛的內(nèi)容都是我干的棋傍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼难审,長吁一口氣:“原來是場噩夢啊……” “哼瘫拣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起告喊,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤麸拄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后黔姜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拢切,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年秆吵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淮椰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纳寂,死狀恐怖主穗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毙芜,我是刑警寧澤忽媒,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站爷肝,受9級特大地震影響猾浦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜灯抛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一金赦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧对嚼,春花似錦夹抗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杏愤。三九已至,卻和暖如春已脓,著一層夾襖步出監(jiān)牢的瞬間珊楼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工度液, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厕宗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓堕担,卻偏偏與公主長得像已慢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子霹购,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 如果你的項(xiàng)目中用到了搜索佑惠,現(xiàn)在的選擇就奔上就是Solr或者Elasticsearch了,今天我們就來看看Solr齐疙,...
    帥可兒妞閱讀 671評論 0 1
  • 1. Solr 官網(wǎng) 搜索引擎是指一個(gè)龐大的互聯(lián)網(wǎng)資源數(shù)據(jù)庫膜楷,如網(wǎng)頁,新聞組剂碴,程序把将,圖像等。它有助于在萬維網(wǎng)上定位...
    _凌浩雨閱讀 2,195評論 0 4
  • 搜索技術(shù) SOLR和LUCENE關(guān)系 Solr是基于Lucene做的忆矛,Lucene是一套信息檢索工具包察蹲,但并不包...
    面朝大海_1234閱讀 469評論 0 2
  • ??Solr是一個(gè)高性能,采用Java5開發(fā)催训,基于Lucene的全文搜索服務(wù)器洽议。同時(shí)對其進(jìn)行了擴(kuò)展,提供了比Luc...
    繾綣離愁閱讀 1,132評論 0 0
  • 一漫拭、前言 在開發(fā)網(wǎng)站/App項(xiàng)目的時(shí)候亚兄,通常需要搭建搜索服務(wù)。比如采驻,新聞類應(yīng)用需要檢索標(biāo)題/內(nèi)容审胚,社區(qū)類應(yīng)用需要檢...
    Ceelog閱讀 5,916評論 2 36