當前位置:成語大全網 - 英語詞典 - 如何用Solr搭建大數據查詢平臺

如何用Solr搭建大數據查詢平臺

0×00開頭照例是扯淡。

自從各種脫褲子事件開始層出不窮,我在學校學乖了,所有地方的密碼都改成了不壹樣。重要賬號的密碼定期更換,我甚至開始用假名,怕自己生出來18代祖宗。我給自己取了個新的網名。這個看似好聽的名字,其實是我們老家的罵人方言,意思是腦殘的人...-_-||嗯。

這只是壹個名字。至於姓氏,每個帳戶的註冊信息按照趙千孫、、、王、、李興才、王興才的姓氏排列...所以不知道自己這麽有才多久了。終於有壹天,我接到了壹個陌生的電話:餵,是馬興才先生嗎?

好吧,合適的終於來了,我就按名字搜了壹下,得知我用這個名字做了某個網站,然後就通過各種渠道搜了壹下。果然,破站扒了我的褲子。

果斷下了褲子,然後壹發不可收拾,走上了收藏褲子的道路,直到有壹天,我發現收藏已經很豐富了,粗略估計有幾十億條數據,拍著腦袋想,這個不能隨便收藏,我也成立了壹個社工庫來用...

0×01簡介

如何建設社工圖書館?這種海量數據不是簡單的用mysql建個庫,然後做個php查詢Select * from sgk where username像“% xxxxx%”,就能做到的。也不是某些幼稚的人想隨便找個4g內存,amd雙核破電腦就能提出來。以上語句和系統配置真正用於社工庫查詢,查壹條記錄可能需要半個小時。好在這個問題早就被壹個叫全文搜索引擎的東西解決了。更好的消息是,大多數全文搜索引擎都是開源的,不需要花錢。

目前互聯網上已經搭建的社工庫大多是mysql+coreseek+php,coreseek是基於sphinx的優秀全文搜索引擎。但它的缺點是比較輕量,壹旦數據量超過幾個億就會有點不堪重負,構建集群的分布式性能也不理想。如果要考慮未來數據量增加的情況,還是要用其他方案,所以我用了solr。

Solr基於著名的Lucene框架。基於java,可以通過jdbc接口導入各種數據庫和各種格式的數據,非常適合開發企業級海量數據搜索平臺,並提供完善的solr雲集群功能。更重要的是,Solr的數據查詢完全基於. MySQL . JDBC . driver " URL = " JDBC:MySQL://127 . 0 . 0 . 1:3306/newsgk " user = " root " password = " password " batch size = "-1。

& ltdocument name = " mysgk " & gt

& ltentity name = " b 41 sgk " PK = " id " query = " select * from b 41 sgk " & gt;

& ltfield column = " id " name = " id "/& gt;

& ltfield column = " username " name = " username "/>

& ltfield column = " email " name = " email "/& gt;

& ltfield column = " password " name = " password "/& gt;

& ltfield column = " salt " name = " salt "/& gt;

& ltfield column = " IP " name = " IP "/& gt;

& ltfield column = " site " name = " site "/& gt;

& lt/entity & gt;

& lt/document & gt;

& lt/data config & gt;

這個文件負責配置導入的數據源。請根據mysql的實際設置修改數據源的內容。以下實體的內容必須嚴格按照mysql中社工庫表的結構填寫,列名要和數據庫中的完全壹致。

然後打開solrconfig.xml先找到這壹段:

& ltschema factory class = " managedindexschema factory " >

& ltbool name="mutable " >true & lt/bool & gt;

& ltstr name = " managedSchemaResourceName " >托管模式& lt/str & gt;

& lt/schema factory & gt;

全部註釋掉,添加壹行並將其更改為:

& lt!-& lt;schema factory class = " managedindexschema factory " >

& ltbool name="mutable " >true & lt/bool & gt;

& ltstr name = " managedSchemaResourceName " >托管模式& lt/str & gt;

& lt/schema factory & gt;-& gt;

& ltschema factory class = " classic index schema factory "/& gt。

這是因為solr5及以上版本默認使用managed-schema來管理模式,需要更改為可手動修改。

然後我們需要關閉建議,它為搜索提供智能提示。我們在社工圖書館不用這個功能。重要的是,建議會嚴重拖慢solr的啟動速度。在超過十億個數據的情況下,打開建議可能會導致solr開始加載核心幾個小時!

同樣在solrconfig.xml中,找到這樣壹段話:

& ltsearch component name = " suggest " class = " Solr。SuggestComponent " >

& ltlst name="suggester " >

& ltstr name="name " >mySuggester & lt/str & gt;

& ltstr name="lookupImpl " >FuzzyLookupFactory & lt/str & gt;& lt!-org . Apache . Solr . spelling . suggest . FST-& gt;

& ltstr name="dictionaryImpl " >DocumentDictionaryFactory & lt/str & gt;& lt!-org . Apache . Solr . spelling . suggest . highcfrequencydictionaryfactory-& gt;

& ltstr name="field " >cat & lt/str & gt;

& ltstr name="weightField " >價格& lt/str & gt;

& ltstr name = " suggestAnalyzerFieldType " >字符串& lt/str & gt;

& lt/lst & gt;

& lt/search component & gt;

& ltrequest handler name = "/suggest " class = " Solr。search handler " startup = " lazy " & gt;

& ltlst name="defaults " >

& ltstr name="suggest " >true & lt/str & gt;

& ltstr name="suggest.count " >10 & lt;/str & gt;

& lt/lst & gt;

& ltarr name="components " >

& ltstr & gt建議& lt/str & gt;

& lt/arr & gt;

& lt/request handler & gt;

刪除所有這些,然後保存solrconfig.xml文件。

接下來,復制托管模式,將其重命名為schema.xml(不要刪除原始文件),打開它並找到以下位置:

只保留_version_和_root_ nodes,然後刪除所有字段dynamicField和copyField,並添加以下部分:

& ltfield name = " id " type = " int " indexed = " true " stored = " true " required = " true " multimedia = " false "/& gt;

& ltfield name = " username " type = " text _ ik " indexed = " true " stored = " true "/& gt;

& ltfield name = " email " type = " text _ ik " indexed = " true " stored = " true "/& gt;

& ltfield name = " password " type = " text _ general " indexed = " true " stored = " true "/& gt;

& ltfield name = " salt " type = " text _ general " indexed = " true " stored = " true "/& gt;

& ltfield name = " IP " type = " text _ general " indexed = " true " stored = " true "/& gt;

& ltfield name = " site " type = " text _ general " indexed = " true " stored = " true "/& gt;

& ltfield name = " keyword " type = " text _ ik " indexed = " true " stored = " false " multimedia = " true "/& gt;

& ltcopy field source = " username " dest = " keyword "/& gt。

& ltcopy field source = " email " dest = " keyword "/& gt。

& ltuniqueKey & gtid & lt/unique key & gt;

這裏的uniqueKey是配置文件中原來的那個,用來指定索引字段,必須保留。創建壹個名為keyword的新字段,用於聯合查詢,即當需要同時使用多個字段進行關鍵字查詢時,可以用這個字段名代替,以增加查詢效率,後面的copyField用於指定要復制到keyword的字段。註意關鍵字等字段,以下多值屬性必須為真。

用戶名、郵箱、關鍵詞字段用於檢索查詢關鍵詞,其類型指定為text_ik,這是我們自己創建的壹種類型,因為solr內置了中文分詞,但是效果並不好,所以需要添加IKAnalyzer中文分詞引擎來查詢中文。下載IKAnalyzer for solr5的源碼包,然後用Maven編譯得到壹個文件IKAnalyzer-5.0.jar,放在Solr-5 . 5 . 0/server/Solr-web app/web app/we b-INF/lib目錄下,然後在solrconfig.xml的fieldType部分添加以下內容:

& ltfield type name = " text _ ik " class = " Solr。文本字段" >

& ltanalyzer type = " index " use smart = " false " class = " org . wl tea . analyzer . Lucene . ik analyzer "/& gt;

& ltanalyzer type = " query " use smart = " true " class = " org . wl tea . analyzer . Lucene . ik analyzer "/& gt;

& lt/field type & gt;

保存後,核心的配置完成,但是要導入mysql數據,我們還需要在mysql網站下載mysql-connector-Java-bin.jar庫文件,以及solr-5.5.0/dist目錄下的Solr-dataimporthandler-5 . 5 . 0 . jar。將solr-DataImportHandler-Extras-5 . 5 . 0 . jar復制到Solr-5 . 5 . 0/server/Solr-web app/web app/we b-INF/lib中,然後重啟Solr,就可以開始數據導入了。