solr概述

The cat is named Java

Solr是Apache旗下基于NoSQL技術的全文本搜索引擎。
簡單來說,Solr具有如下特點:

  • 強大的全文本搜索能力
  • 針對大容量流量進行優化
  • 提供基于XML/JSON/HTTP的標準開放接口
  • 提供高效的管理頁面
  • 提供易于使用的監控工具
  • 高度易于擴展和容錯
  • 使用簡單的配置文件,靈活且適應性強
  • 近實時索引
  • 提供可擴展的插件

安裝

Cli命令?不存在的….emmm
curl或wget吧
curl https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.4.0/solr-7.4.0.zip
這里使用的鏈接是清華的鏡像,具體請參見Apache Download Mirrors
將Solr下載后解壓,得到如下的文件夾:

solr-7.4.0目錄結構

/bin:存放solr相關的運行腳本和配置文件
關于solr的quick start,大家參見Solr quick start

使用solr建立自己的搜索服務

啟動solr

首先,切換到solr下的bin目錄:
cd solr-7.4.0/bin
使用如下命令運行solr
./solr start

啟動solr

看到這個輸出,說明solr就啟動成功了,可以打開 http://localhost:8983/solr 查看solr的運行情況。

solr管理頁面

此外,solr還支持如下命令

  • ./solr restart 重啟solr
  • ./solr stop 停止solr
  • ./solr -h 查看幫助

創建自己的核心(core)

核心(core)其實就是一個搜索的倉庫,可以往這個搜索倉庫添加索引文檔,再進行相關的搜索和查詢。
使用如下命令創建一個新的核心:
./solr create -c <yourCollection>
注意:該命令創建核心時,使用了solr的默認配置文件,solr官方不推薦我們在應用到實際產品時使用它的默認配置文件。但是我們可以在默認文件的基礎上進行修改。當我們需要部署多個solr實例的時候,這份配置文件就可以復用了。其次,如果你的solr運行在cloud模式下,可以添加 -s 2 -rf 2,對于這兩個參數起到的作用,這里簡單說明一下,solr為你創建的核心添加了兩個節點(node),每個節點都添加了兩個區塊(shard),這兩個參數在SolrCloud中才會起作用。

創建核心

執行創建核心的命令后,可以在solr管理面板中查看新核心的基本信息:


查看核心基本信息

Solr配置文件

在上一步說到,我們創建的核心使用了solr的默認配置文件,那默認配置文件在哪里呢?這些默認配置文件有什么用呢?
Solr的默認配置文件在solr-7.4.0/server/solr/configsets/_default/conf目錄下:

solr配置文件結構

簡單說明一下這些文件的作用:
synonyms.txt 同義詞替換配置
這個文件的作用就是配置一些常用的同義詞替換。比如說你的文檔里面有一個關鍵詞土豆,但是顯然用戶如果搜索馬鈴薯洋芋,solr也應該返回包含土豆的文檔。synonyms.txt文件就是配置這樣的一些同義詞映射關系的。

stopwords.txt停用詞配置
對于停用詞配置,我暫時找不到一個中文搜索的例子來解釋這個東西。但是在英文里面,有很多冠詞之類的,如”a”,”an”,”the”等,這些冠詞是不需要作為關鍵詞進行索引的,用戶提交的搜索里面包含這些無意義的詞匯時,也應當剔除。因此stopwords.txt就是用來配置這些沒有意義的詞匯表的。但是在中文里面,這些無意義的詞匯可能比較少。我能想到的可能是量詞之類的,比如個、顆等;當用戶搜索”一顆蘋果”時,顆不應該作為關鍵詞進行查詢。

solrconfig.xmlsolr核心配置文件
該文件配置了solr核心運行的基本參數。該文件一般不需要進行修改,里面的默認配置已經能夠滿足大部分應用的需求。

managed-schemacore模式配置
這個文件沒有后綴,但其實他是一個xml文檔,solr不希望我們手工編輯這個文件,所以沒有寫明它的后綴名吧。這個文件是核心如何對文檔進行索引、分析、查詢處理的配置文件,solr確實也提供了相應的API對這個文件進行修改。在老版本中,古老的程序員都是手工修改這個文件的。

當你使用solr create命令創建自己的核心時,solr就會把該文件夾提交到新核心的配置文件目錄下。默認情況下,新核心在 solr-7.4.0/server/solr/ 目錄下

managed-schema詳細介紹

首先,選用一款你最愛的文本編輯器打開solr-7.4.0/server/solr/<yourCollectionName>/conf/managed-schema文件,定位到<field>節:


field配置

如圖,solr默認為我們配置的四個字段。其中id作為solr索引和存儲的主鍵;_version記錄了每個字段的版本信息;如果solr沒有匹配到你文檔的字段信息的話,就會默認把你的文檔全部索引成為text字段。
對了,這里隨便說一句。對于需要添加到solr進行索引的結構化文檔,必須包含id字段;但是對于類似于word、pdf這種文件可以不用指明id。
緊接著,solr還定義了一大推默認的動態字段:

動態字段配置

動態字段的作用就是模糊匹配字段進行索引。舉個例子,比如你的文檔里面有類似于”age_i”,”level_i”等,就會被動態字段”*_i”匹配到,并識別為int數據類型。
這個文件余下的部分就是定義了一堆默認的字段類型,比如:

默認字段類型

這種低級的基礎數據類型,這些基礎的類型都不帶有數據分析的功能。
當然還有待數據分析、過濾功能的類型:


帶數據分析的字段類型

Solr定義的類型默認是不支持中文解析的,但是我們完全可以自己去定義這些類型。比如定義對中文進行分詞、過濾的字段類型。

根據需要索引的文檔配置manage-schema

這里的配置主要是對manage-schema進行配置。由于每個公司管理的數據在結構上差異巨大,數據類型也不盡相同。因此,對于管理的數據進行針對性的配置,對實現更好的搜索效果至關重要。

對于需要搜索的數據,我們需要對其配置字段信息、字段的類型信息等。雖然solr提供了schemaless的功能,該功能可以根據你提交的文檔自動生成字段并推測字段類型。但是這個功能坑比較多,實際使用的時候經常會觸發solr內部的一大推數據類型轉換異常。由于solr是基于Java這類強類型語言開發的,因此這里我們還是手動對需要搜索的數據進行配置比較好。

比如,需要添加的文檔結構如下:

待添加文檔結構

這里給的例子時JSON文件,當然你也可以使用XML、CSV一類的結構化文件格式。
對應的,我們在managed-schema添加對如上結構的識別信息:

    <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表示對該字段需要進行索引,索引的目的是為了后面可以對該字段進行查詢;
Stored表示是否存儲該字段,只有存儲的了字段才會顯示在搜索結果中。
如何設置這個兩個屬性呢?我覺得可以使用如下的簡單原則:

  • 判斷某個字段會不會為用戶提供搜索的功能,如果用戶能夠根據該字段進行搜索,那么indexed設置為true
  • 對于indexed為true的字段,stored也應該為true
  • 對于不需要索引的字段,如果需要暫時給用戶看,那么stored設置為true
    將你的配置文件添加到solr默認的field區下面就可以了。
    現在,已經完成了對solr核心的基本配置,我們可以在solr core admin中重新加載核心,讓新的配置文件生效。


    重新加載核心

點了reload之后反饋的是綠色,那么說明你手工修改manage-schema已經被solr原諒了,恭喜你。

將數據添加到solr進行索引

在完成managed-schema配置后,我們就可以把數據添加到solr了。
在命令行中使用
./post -c <yourCoreName> <your-data-path>
如下:

添加索引文件

如果你的terminal瘋狂輸出一大堆信息的話,說明emmmm你的配置可能有點問題,參照前面的步驟仔細檢查一遍喲~
到這里我們已經將數據成功的提交給solr進行索引了,那我們是不是就可以利用solr進行搜索了呢?
是的,沒錯。打開這個神奇的鏈接 http://localhost:8983/solr/#/<yourCollectionName>/query 吧!

第一次搜索

直接click Execute Query按鈕!如果出現一遍原諒色的海洋,恭喜你。進入solr概覽的總結,否則的話請從頭仔細看一下本文章,直到出現一片原諒色的海洋,否則solr將對你永不饒恕,你已經惹怒它了。

總結

  • 本文對solr進行了一個簡單的介紹,并說明了solr一些基礎的啟動命令,并介紹了solr核心的創建方式。但是注意,文中對核心用了兩個不同的詞匯進行表述,分別是”core”和”collection”,不嚴謹的說他們都是表示核心。
  • 對于核心的配置文件,本文做了一個簡要的概述,介紹了一些重要配置文件的基本作用。
  • 本文重點介紹了managed-schema文件的結構和配置方式。
  • 本文使用solr實現了對文檔的搜索。

總結一下solr的基本使用:

  1. 使用./solr start命令啟動solr
  2. 使用./solr create命令創建一個核心
  3. 根據待索引文檔的結構,配置核心的managed-schema文件
  4. 將準備好的數據利用./post命令添加到solr進行索引。

最后說明
本文介紹的命令均是在mac os系統上,linux系統的命令格式和本文差異不大。但windows系統存在部分差異,可以參見前文提交的sorl-quick-start鏈接查看詳細內容。

請期待下一期關于solr在filedType中添加中文分詞、從數據庫導入數據倒solr已經solr高級搜索的相關內容。
please give me your ?? and ??!!!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,808評論 18 139
  • 這幾天,在小區門口,有一個書攤成天地擺著,書上放了一塊大大的牌子——“圖書特價15元/斤”。這種畫面,其實并不陌生...
    米蘭文萃閱讀 970評論 0 1
  • 東野圭吾的第三本書,相較白夜行而言,兩者的共同之處可能在于都是以一樁命案開始,經過高智商人群的布置,命案成難案,不...
    AlisaCheng12閱讀 138評論 0 0
  • 對于自身控制來講,每個人所傾向的需求是不同的,生本能與死本能之間的轉換,掌握的根源在于你對攻擊者的回應。 看似攻擊...
    楊平的閱讀 201評論 0 0