Solr是Apache旗下基于NoSQL技術(shù)的全文本搜索引擎癞季。
簡(jiǎn)單來說,Solr具有如下特點(diǎn):
- 強(qiáng)大的全文本搜索能力
- 針對(duì)大容量流量進(jìn)行優(yōu)化
- 提供基于XML/JSON/HTTP的標(biāo)準(zhǔn)開放接口
- 提供高效的管理頁面
- 提供易于使用的監(jiān)控工具
- 高度易于擴(kuò)展和容錯(cuò)
- 使用簡(jiǎn)單的配置文件,靈活且適應(yīng)性強(qiáng)
- 近實(shí)時(shí)索引
- 提供可擴(kuò)展的插件
安裝
Cli命令?不存在的….emmm
curl或wget吧
curl https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.4.0/solr-7.4.0.zip
這里使用的鏈接是清華的鏡像,具體請(qǐng)參見Apache Download Mirrors
將Solr下載后解壓,得到如下的文件夾:
/bin:存放solr相關(guān)的運(yùn)行腳本和配置文件
關(guān)于solr的quick start撩独,大家參見Solr quick start
使用solr建立自己的搜索服務(wù)
啟動(dòng)solr
首先敞曹,切換到solr下的bin目錄:
cd solr-7.4.0/bin
使用如下命令運(yùn)行solr
./solr start
看到這個(gè)輸出,說明solr就啟動(dòng)成功了综膀,可以打開 http://localhost:8983/solr 查看solr的運(yùn)行情況澳迫。
此外,solr還支持如下命令
- ./solr restart 重啟solr
- ./solr stop 停止solr
- ./solr -h 查看幫助
創(chuàng)建自己的核心(core)
核心(core)其實(shí)就是一個(gè)搜索的倉(cāng)庫剧劝,可以往這個(gè)搜索倉(cāng)庫添加索引文檔橄登,再進(jìn)行相關(guān)的搜索和查詢。
使用如下命令創(chuàng)建一個(gè)新的核心:
./solr create -c <yourCollection>
注意:該命令創(chuàng)建核心時(shí)讥此,使用了solr的默認(rèn)配置文件拢锹,solr官方不推薦我們?cè)趹?yīng)用到實(shí)際產(chǎn)品時(shí)使用它的默認(rèn)配置文件。但是我們可以在默認(rèn)文件的基礎(chǔ)上進(jìn)行修改萄喳。當(dāng)我們需要部署多個(gè)solr實(shí)例的時(shí)候卒稳,這份配置文件就可以復(fù)用了。其次他巨,如果你的solr運(yùn)行在cloud模式下充坑,可以添加 -s 2 -rf 2
,對(duì)于這兩個(gè)參數(shù)起到的作用染突,這里簡(jiǎn)單說明一下捻爷,solr為你創(chuàng)建的核心添加了兩個(gè)節(jié)點(diǎn)(node),每個(gè)節(jié)點(diǎn)都添加了兩個(gè)區(qū)塊(shard)份企,這兩個(gè)參數(shù)在SolrCloud中才會(huì)起作用也榄。
執(zhí)行創(chuàng)建核心的命令后,可以在solr管理面板中查看新核心的基本信息:
Solr配置文件
在上一步說到司志,我們創(chuàng)建的核心使用了solr的默認(rèn)配置文件手蝎,那默認(rèn)配置文件在哪里呢榕莺?這些默認(rèn)配置文件有什么用呢?
Solr的默認(rèn)配置文件在solr-7.4.0/server/solr/configsets/_default/conf目錄下:
簡(jiǎn)單說明一下這些文件的作用:
synonyms.txt 同義詞替換配置
這個(gè)文件的作用就是配置一些常用的同義詞替換棵介。比如說你的文檔里面有一個(gè)關(guān)鍵詞土豆钉鸯,但是顯然用戶如果搜索馬鈴薯、洋芋邮辽,solr也應(yīng)該返回包含土豆的文檔唠雕。synonyms.txt文件就是配置這樣的一些同義詞映射關(guān)系的。
stopwords.txt停用詞配置
對(duì)于停用詞配置吨述,我暫時(shí)找不到一個(gè)中文搜索的例子來解釋這個(gè)東西岩睁。但是在英文里面,有很多冠詞之類的揣云,如”a”,”an”,”the”等捕儒,這些冠詞是不需要作為關(guān)鍵詞進(jìn)行索引的,用戶提交的搜索里面包含這些無意義的詞匯時(shí)邓夕,也應(yīng)當(dāng)剔除刘莹。因此stopwords.txt就是用來配置這些沒有意義的詞匯表的。但是在中文里面焚刚,這些無意義的詞匯可能比較少点弯。我能想到的可能是量詞之類的,比如個(gè)矿咕、顆等抢肛;當(dāng)用戶搜索”一顆蘋果”時(shí),顆不應(yīng)該作為關(guān)鍵詞進(jìn)行查詢碳柱。
solrconfig.xmlsolr核心配置文件
該文件配置了solr核心運(yùn)行的基本參數(shù)捡絮。該文件一般不需要進(jìn)行修改,里面的默認(rèn)配置已經(jīng)能夠滿足大部分應(yīng)用的需求莲镣。
managed-schemacore模式配置
這個(gè)文件沒有后綴锦援,但其實(shí)他是一個(gè)xml文檔,solr不希望我們手工編輯這個(gè)文件剥悟,所以沒有寫明它的后綴名吧灵寺。這個(gè)文件是核心如何對(duì)文檔進(jìn)行索引、分析区岗、查詢處理的配置文件略板,solr確實(shí)也提供了相應(yīng)的API對(duì)這個(gè)文件進(jìn)行修改。在老版本中慈缔,古老的程序員都是手工修改這個(gè)文件的叮称。
當(dāng)你使用solr create命令創(chuàng)建自己的核心時(shí),solr就會(huì)把該文件夾提交到新核心的配置文件目錄下。默認(rèn)情況下瓤檐,新核心在 solr-7.4.0/server/solr/ 目錄下
managed-schema詳細(xì)介紹
首先赂韵,選用一款你最愛的文本編輯器打開solr-7.4.0/server/solr/<yourCollectionName>/conf/managed-schema文件,定位到<field>節(jié):
如圖挠蛉,solr默認(rèn)為我們配置的四個(gè)字段祭示。其中id作為solr索引和存儲(chǔ)的主鍵;_version記錄了每個(gè)字段的版本信息谴古;如果solr沒有匹配到你文檔的字段信息的話质涛,就會(huì)默認(rèn)把你的文檔全部索引成為text字段。
對(duì)了掰担,這里隨便說一句汇陆。對(duì)于需要添加到solr進(jìn)行索引的結(jié)構(gòu)化文檔,必須包含id字段带饱;但是對(duì)于類似于word毡代、pdf這種文件可以不用指明id。
緊接著勺疼,solr還定義了一大推默認(rèn)的動(dòng)態(tài)字段:
動(dòng)態(tài)字段的作用就是模糊匹配字段進(jìn)行索引教寂。舉個(gè)例子,比如你的文檔里面有類似于”age_i”,”level_i”等恢口,就會(huì)被動(dòng)態(tài)字段”*_i”匹配到孝宗,并識(shí)別為int數(shù)據(jù)類型穷躁。
這個(gè)文件余下的部分就是定義了一堆默認(rèn)的字段類型耕肩,比如:
這種低級(jí)的基礎(chǔ)數(shù)據(jù)類型,這些基礎(chǔ)的類型都不帶有數(shù)據(jù)分析的功能问潭。
當(dāng)然還有待數(shù)據(jù)分析猿诸、過濾功能的類型:
Solr定義的類型默認(rèn)是不支持中文解析的,但是我們完全可以自己去定義這些類型狡忙。比如定義對(duì)中文進(jìn)行分詞梳虽、過濾的字段類型。
根據(jù)需要索引的文檔配置manage-schema
這里的配置主要是對(duì)manage-schema進(jìn)行配置灾茁。由于每個(gè)公司管理的數(shù)據(jù)在結(jié)構(gòu)上差異巨大窜觉,數(shù)據(jù)類型也不盡相同。因此北专,對(duì)于管理的數(shù)據(jù)進(jìn)行針對(duì)性的配置禀挫,對(duì)實(shí)現(xiàn)更好的搜索效果至關(guān)重要。
對(duì)于需要搜索的數(shù)據(jù)拓颓,我們需要對(duì)其配置字段信息语婴、字段的類型信息等。雖然solr提供了schemaless的功能,該功能可以根據(jù)你提交的文檔自動(dòng)生成字段并推測(cè)字段類型砰左。但是這個(gè)功能坑比較多匿醒,實(shí)際使用的時(shí)候經(jīng)常會(huì)觸發(fā)solr內(nèi)部的一大推數(shù)據(jù)類型轉(zhuǎn)換異常。由于solr是基于Java這類強(qiáng)類型語言開發(fā)的缠导,因此這里我們還是手動(dòng)對(duì)需要搜索的數(shù)據(jù)進(jìn)行配置比較好廉羔。
比如,需要添加的文檔結(jié)構(gòu)如下:
這里給的例子時(shí)JSON文件酬核,當(dāng)然你也可以使用XML蜜另、CSV一類的結(jié)構(gòu)化文件格式。
對(duì)應(yīng)的嫡意,我們?cè)趍anaged-schema添加對(duì)如上結(jié)構(gòu)的識(shí)別信息:
<field name="user_id" type="plong" indexed="false" stored="true"/>
<field name="book_source" type="pint" indexed="false" stored="true"/>
<field name="ori_id" type="pint" indexed="false" stored="true"/>
<field name="ref_id" type="pint" indexed="false" stored="true"/>
<field name="book_name" type="text_general" indexed="true" stored="true" />
<field name="book_price" type="pdouble" indexed="true" stored="true" />
<field name="boor_price_type" type="string" indexed="false" stored="true"/>
<field name="book_author" type="text_general" indexed="true" stored="true" />
<field name="book_press" type="text_general" indexed="true" stored="true" />
<field name="book_date" type="pdate" indexed="true" stored="true" />
<field name="book_edition" type="string" indexed="false" stored="true"/>
<field name="book_isbn" type="text_general" indexed="true" stored="true" />
<field name="book_barcode" type="text_general" indexed="true" stored="true" />
<field name="book_pic" type="string" indexed="false" stored="true"/>
<field name="book_adopted" type="pint" indexed="false" stored="true"/>
<field name="book_description" type="text_general" indexed="true" stored="true" />
<field name="book_md5" type="string" indexed="false" stored="true"/>
<field name="book_catalog" type="text_general" indexed="true" stored="true" />
<field name="book_cretime" type="pdate" indexed="true" stored="true" docValues="true" />
<field name="book_credate" type="pdate" indexed="true" stored="true" docValues="true" />
這里說明一下indexed和stored屬性的作用:
Indexed表示對(duì)該字段需要進(jìn)行索引举瑰,索引的目的是為了后面可以對(duì)該字段進(jìn)行查詢;
Stored表示是否存儲(chǔ)該字段蔬螟,只有存儲(chǔ)的了字段才會(huì)顯示在搜索結(jié)果中此迅。
如何設(shè)置這個(gè)兩個(gè)屬性呢?我覺得可以使用如下的簡(jiǎn)單原則:
- 判斷某個(gè)字段會(huì)不會(huì)為用戶提供搜索的功能旧巾,如果用戶能夠根據(jù)該字段進(jìn)行搜索耸序,那么indexed設(shè)置為true
- 對(duì)于indexed為true的字段,stored也應(yīng)該為true
-
對(duì)于不需要索引的字段鲁猩,如果需要暫時(shí)給用戶看坎怪,那么stored設(shè)置為true
將你的配置文件添加到solr默認(rèn)的field區(qū)下面就可以了母蛛。
現(xiàn)在慎冤,已經(jīng)完成了對(duì)solr核心的基本配置盒发,我們可以在solr core admin中重新加載核心牲阁,讓新的配置文件生效浙巫。
點(diǎn)了reload之后反饋的是綠色嗅绸,那么說明你手工修改manage-schema已經(jīng)被solr原諒了搞疗,恭喜你嗤朴。
將數(shù)據(jù)添加到solr進(jìn)行索引
在完成managed-schema配置后娱仔,我們就可以把數(shù)據(jù)添加到solr了沐飘。
在命令行中使用
./post -c <yourCoreName> <your-data-path>
如下:
如果你的terminal瘋狂輸出一大堆信息的話,說明emmmm你的配置可能有點(diǎn)問題牲迫,參照前面的步驟仔細(xì)檢查一遍喲~
到這里我們已經(jīng)將數(shù)據(jù)成功的提交給solr進(jìn)行索引了耐朴,那我們是不是就可以利用solr進(jìn)行搜索了呢?
是的盹憎,沒錯(cuò)筛峭。打開這個(gè)神奇的鏈接 http://localhost:8983/solr/#/<yourCollectionName>/query 吧!
直接click Execute Query按鈕脚乡!如果出現(xiàn)一遍原諒色的海洋蜒滩,恭喜你滨达。進(jìn)入solr概覽的總結(jié),否則的話請(qǐng)從頭仔細(xì)看一下本文章俯艰,直到出現(xiàn)一片原諒色的海洋捡遍,否則solr將對(duì)你永不饒恕,你已經(jīng)惹怒它了竹握。
總結(jié)
- 本文對(duì)solr進(jìn)行了一個(gè)簡(jiǎn)單的介紹画株,并說明了solr一些基礎(chǔ)的啟動(dòng)命令,并介紹了solr核心的創(chuàng)建方式啦辐。但是注意谓传,文中對(duì)核心用了兩個(gè)不同的詞匯進(jìn)行表述,分別是”core”和”collection”芹关,不嚴(yán)謹(jǐn)?shù)恼f他們都是表示核心续挟。
- 對(duì)于核心的配置文件,本文做了一個(gè)簡(jiǎn)要的概述侥衬,介紹了一些重要配置文件的基本作用诗祸。
- 本文重點(diǎn)介紹了managed-schema文件的結(jié)構(gòu)和配置方式。
- 本文使用solr實(shí)現(xiàn)了對(duì)文檔的搜索轴总。
總結(jié)一下solr的基本使用:
- 使用./solr start命令啟動(dòng)solr
- 使用./solr create命令創(chuàng)建一個(gè)核心
- 根據(jù)待索引文檔的結(jié)構(gòu)直颅,配置核心的managed-schema文件
- 將準(zhǔn)備好的數(shù)據(jù)利用./post命令添加到solr進(jìn)行索引。
最后說明
本文介紹的命令均是在mac os系統(tǒng)上怀樟,linux系統(tǒng)的命令格式和本文差異不大功偿。但windows系統(tǒng)存在部分差異,可以參見前文提交的sorl-quick-start鏈接查看詳細(xì)內(nèi)容往堡。
請(qǐng)期待下一期關(guān)于solr在filedType中添加中文分詞械荷、從數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)倒solr已經(jīng)solr高級(jí)搜索的相關(guān)內(nèi)容。
please give me your ?? and ??!!!