論搜尋引擎solr與MongoDB的整合

2021-07-02 06:43:15 字數 4307 閱讀 6300

環境:

ubuntu 12.04  solr 5.1.0  mongodb db version:v2.0.4

solr安裝配置到目前已經非常簡單,參考官方文件:官方文件中用的是cloud這個樣例(-e 指定),最後,我採用的是techproducts,基本命令如下:

/:$ ls solr*

solr-5.1.0.zip

/:$ unzip -q solr-5.1.0.zip

/:$ cd solr-5.1.0/

bin/solr start -e techproducts -noprompt

按照官方文件所說,如果你想用完後關閉solr並清除這個樣例底下的資料,那麼請執行

bin/solr stop -all ; rm -rf example/techproducts/

之所以把這幾條命令提出來,那是因為在整個過程中你可能不停的要啟動,關閉,清除,一直到ok。

此處十分想吐槽網上那些業餘的配置文件,凡是步驟一大片的文件最好不要看,否則整到頭,到最後難過的還是你。

mongodb的安裝在ubuntu下顯得異常傻瓜,apt-get即是最好。

從solr官方給的quickstart文件上來看,它可以搜尋xml, json, csv等多種文件,但絲毫看不出這東西還能跟mongodb整合,但是萬能的人類總是能想辦法把他們弄到一起,或許真的有全能神吧。

還好,leader說:可以的,隨手扔給了我乙個鏈結 但是當我看到裡面的solr版本是4.5時,我的內心是崩潰的,但是沒有辦法了,似乎也找不到更好的辦法了。

於是,我發揮一不怕死,二不怕苦的精神,我硬著頭皮往下讀,突然,一片綠洲出現在我的眼前,尼瑪這個文件裡面有個github位址,而且正是用的github這個東西啊。

對,就是這個mongo-connector 瞧,我們又找到了乙個官方文件了,嗯,靠譜。但最後的結果讓我決定我還是得整理出來乙個適合自身國情發展需要的配置文件來。

算了,廢話太多,直接步驟吧:

1). 建立mongodb的replica set(副本集,大概是這麼翻譯的).

在使用apt-get安裝完mongodb之後,系統會自行啟動mongodb的伺服器,我們將其殺死:

pkill mongod

然後指定副本集啟動:

mongod --replset mydevreplset

mongodb的終止和啟動似乎就是這麼簡單,你要是像上面這樣啟動,它就在前台執行,你需要再次結束時,直接ctrl+c,如果啟動時加上&,它就在後台執行,當然也就得用pkill或者kill了。

然後在mongo shell下對副本集進行初始化:

weizheng@weizheng-hp-pro-2080-microtower-pc:~/solr-5.1.0$ mongo

mongodb shell version: 2.0.4

connecting to: test

primary> rs.initiate()

這個時候mongodb這一邊就弄好了,很簡單,就是要加乙個副本集。

2). 安裝mongo-connector

pip install mongo-connector

如果提示沒有python-pip,apt-get一下便好。mongo-connector這個中介軟體好了,但是先別急著用,因為這個東西要讀取solr的配置檔案,所以solr中的一些地方弄好了,再用這個就又只是一條命令罷了。

3). solr一端的配置

a>

首先它們會讓你修改solr的schema.xml這個檔案,但是在熟悉solr的真個過程中,連這個檔案的毛都沒見到,去哪修改啊。

沒有辦法,這個時候找也得找,不找也得找,使用強大的find命令吧:

weizheng@weizheng-hp-pro-2080-microtower-pc:~/solr-5.1.0$ find . -name "schema.xml"

./server/solr/configsets/basic_configs/conf/schema.xml

./server/solr/configsets/sample_techproducts_configs/conf/schema.xml

./example/example-dih/solr/tika/conf/schema.xml

./example/example-dih/solr/mail/conf/schema.xml

./example/example-dih/solr/solr/conf/schema.xml

./example/example-dih/solr/rss/conf/schema.xml

./example/example-dih/solr/db/conf/schema.xml

./example/techproducts/solr/techproducts/conf/schema.xml

好的,對應我們前面的techproducts樣例,看起來結果中有兩條相關,有這個關鍵字嘛,那大概就是這兩個了,當然,這時候根據經驗來說應該選擇修改第乙個的,因為前面有提到能清除使用者的樣例,也就是說第二個相關的schemal.xml是可以刪除的,立即產生不好的預感,這個東西肯定是solr開啟時自動生成的,而怎麼生成呢,絕大可能是上述第乙個的位置schema.xml的副本,後面驗證了,果然沒錯。

進入正題,找到修改的地方了,那麼,修改吧:

開啟

vi ./server/solr/configsets/sample_techproducts_configs/conf/schema.xml

id
替換成

_id
再新增

最好是這幾處放在一塊,做個標記,以後方便查詢嘛,另外,此處存坑:

注釋掉原來的

不然往solr中新增乙個json,或者xml都會要求有這個欄位id,因為required="true"嘛,這些東西都是我遇到問題後發現的。

schema.xml的修改就是這些。

b>

此處又存在另外乙個坑,其實我們還需要修改solrconfig.xml,要說這些東西都怎麼發現的,被坑了之後碰出來的都。

開啟:

vi ./server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml

解注釋,這個東西要被mongo-connector用到,mongo-connector會請求獲取上面的schema.xml,正是這個handler來處理這個請求,所以說這個很重要。而似乎官方文件認為我們這個就是預設開啟的,並沒有提到此事,所以說巨坑!

c>

配置檔案就是上面兩個,就是這塊比較複雜,不敢保證其他版本的solr也是這樣。

最後,我們按照之前說的關閉solr,清除example/techproducts目錄,重新再次啟動solr,重啟techproducts樣例會產生一些錯誤,那是因為修改了schema.xml,裡面uniquekey變成了_id,而不是id,所以會產生這些錯誤,但這些都可以忽略,不產生錯誤就說明有問題。之後你會發現,那兩個配置檔案被複製成了exmaple/techproducts這個樣例的配置檔案,就像上文說的。

ok,solr一端的配置完畢。

4). 使用mongo-connector連線solr與mongodb

注意,與官方不同的正是這個-t後面的鏈結,因為我們用的是techproducts樣例,所以後面也應該加上這個名字,其實一開是完全不知到這個鏈結是幹啥的,完全是各種誤打誤撞,滑鼠點點出來的,這個--auto-commit-interval引數設為0,從實驗結果來看,應該是一直都不會把mongodb中的資料寫傳到solr那邊的意思,似乎與官方文件完全相反,有待繼續驗證。

最終效果就是你在mongodb中新增一條資料,1s之後在solr中用*:*查詢,就會顯示出更新。

solr搜尋引擎使用

精選30 雲產品,助力企業輕鬆上雲!這裡使用的是mmseg4j分詞器 debugquery發現被切分為 提高 寶貝 排名 執行,這時搜尋條數為9條。更改搜尋條件,進行搜尋,此時搜尋條數為1469,遠遠大於之前的搜尋條件。分詞完畢,將分詞結果以下查詢語法傳入到solr 例如分詞前是 提高寶貝排名 分詞...

搜尋引擎solr系列 solr分詞配置

分詞我理解的是,輸入的一句話,按照它自己定義的規則分為常用詞語。首先,solr有自己基本的型別,string int date long等等。對於string型別,比如在你的core conf manage schema檔案中,配置乙個字段型別為string型別,如果查詢符合 我是中國人 的資料,它...

solr 搜尋引擎及搜尋推薦應用

搜尋框裡輸入關鍵字,從mongodb裡搜尋出關鍵字相關關鍵字記錄。使用者從相關關鍵字裡選取乙個作為最後關鍵字從solr裡查詢資料。1建立索引 從sql裡goodsinfo表查所有記錄,solr.addrange solr.commit 即可建立索引 2客戶端每次搜尋一次在sql表裡searchlog...