solr概述

The cat is named Java

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下載后解壓,得到如下的文件夾:

solr-7.4.0目錄結(jié)構(gòu)

/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

啟動(dòng)solr

看到這個(gè)輸出,說明solr就啟動(dòng)成功了综膀,可以打開 http://localhost:8983/solr 查看solr的運(yùn)行情況澳迫。

solr管理頁面

此外,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ì)起作用也榄。

創(chuàng)建核心

執(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目錄下:

solr配置文件結(jié)構(gòu)

簡(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é):


field配置

如圖挠蛉,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)字段配置

動(dòng)態(tài)字段的作用就是模糊匹配字段進(jìn)行索引教寂。舉個(gè)例子,比如你的文檔里面有類似于”age_i”,”level_i”等恢口,就會(huì)被動(dòng)態(tài)字段”*_i”匹配到孝宗,并識(shí)別為int數(shù)據(jù)類型穷躁。
這個(gè)文件余下的部分就是定義了一堆默認(rèn)的字段類型耕肩,比如:

默認(rèn)字段類型

這種低級(jí)的基礎(chǔ)數(shù)據(jù)類型,這些基礎(chǔ)的類型都不帶有數(shù)據(jù)分析的功能问潭。
當(dāng)然還有待數(shù)據(jù)分析猿诸、過濾功能的類型:


帶數(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)如下:

待添加文檔結(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的基本使用:

  1. 使用./solr start命令啟動(dòng)solr
  2. 使用./solr create命令創(chuàng)建一個(gè)核心
  3. 根據(jù)待索引文檔的結(jié)構(gòu)直颅,配置核心的managed-schema文件
  4. 將準(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 ??!!!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末投蝉,一起剝皮案震驚了整個(gè)濱河市养葵,隨后出現(xiàn)的幾起案子征堪,更是在濱河造成了極大的恐慌瘩缆,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佃蚜,死亡現(xiàn)場(chǎng)離奇詭異庸娱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谐算,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門熟尉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洲脂,你說我怎么就攤上這事斤儿【绨” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵往果,是天一觀的道長(zhǎng)疆液。 經(jīng)常有香客問我,道長(zhǎng)陕贮,這世上最難降的妖魔是什么堕油? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮肮之,結(jié)果婚禮上掉缺,老公的妹妹穿的比我還像新娘。我一直安慰自己戈擒,他們只是感情好眶明,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筐高,像睡著了一般赘来。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凯傲,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天犬辰,我揣著相機(jī)與錄音,去河邊找鬼冰单。 笑死幌缝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诫欠。 我是一名探鬼主播涵卵,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼荒叼!你這毒婦竟也來了轿偎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤被廓,失蹤者是張志新(化名)和其女友劉穎坏晦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫁乘,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昆婿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜓斧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仓蛆。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挎春,靈堂內(nèi)的尸體忽然破棺而出看疙,到底是詐尸還是另有隱情豆拨,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布能庆,位于F島的核電站辽装,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏相味。R本人自食惡果不足惜拾积,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丰涉。 院中可真熱鬧拓巧,春花似錦、人聲如沸一死。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽投慈。三九已至承耿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伪煤,已是汗流浹背加袋。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抱既,地道東北人职烧。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像防泵,于是被迫代替她去往敵國(guó)和親蚀之。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理捷泞,服務(wù)發(fā)現(xiàn)足删,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 這幾天锁右,在小區(qū)門口失受,有一個(gè)書攤成天地?cái)[著,書上放了一塊大大的牌子——“圖書特價(jià)15元/斤”骡湖。這種畫面贱纠,其實(shí)并不陌生...
    米蘭文萃閱讀 939評(píng)論 0 1
  • 東野圭吾的第三本書峻厚,相較白夜行而言响蕴,兩者的共同之處可能在于都是以一樁命案開始,經(jīng)過高智商人群的布置惠桃,命案成難案浦夷,不...
    AlisaCheng12閱讀 130評(píng)論 0 0
  • 對(duì)于自身控制來講辖试,每個(gè)人所傾向的需求是不同的,生本能與死本能之間的轉(zhuǎn)換劈狐,掌握的根源在于你對(duì)攻擊者的回應(yīng)罐孝。 看似攻擊...
    楊平的閱讀 190評(píng)論 0 0