solr以及ik分詞器簡介

u014249394發表於2017-04-28
  • 介紹

solr簡介、ik分詞器簡介     1、solr簡介... 1 1.1、什麼是lucene?... 1 1.2、lucene和solr是什麼關係?... 1 2、Solr安裝,配置... 2 3、IK分詞器安裝,配置... 4 4、solrj查詢介面... 5 5、solr在jetty伺服器上執行... 6 6、專案引入Solr時應該考慮的一些問題... 7

1、solr簡介

Solr是一個基於Lucene的Java搜尋引擎伺服器。Solr 提供了層面搜尋、命中醒目顯示並且支援多種輸出格式(包括 XML/XSLT 和 JSON 格式)。它易於安裝和配置,而且附帶了一個基於 HTTP 的管理介面。Solr已經在眾多大型的網站中使用,較為成熟和穩定。Solr 包裝並擴充套件了 Lucene,所以Solr的基本上沿用了Lucene的相關術語。更重要的是,Solr 建立的索引與 Lucene 搜尋引擎庫完全相容。通過對Solr 進行適當的配置,某些情況下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Lucene 應用程式中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 建立的索引。

1.1、什麼是lucene?

Lucene是一個基於Java的全文資訊檢索工具包,它不是一個完整的搜尋應用程式,而是為 你的應用程式提供索引和搜尋功能。Lucene 目前是 Apache Jakarta(雅加達) 家族中的一個開源專案。也是目前最為流行的基於Java開源全文檢索工具包。目前已經有很多應用程式的搜尋功能是基於 Lucene ,比如Eclipse 幫助系統的搜尋功能。Lucene能夠為文字型別的資料建立索引,所以你只要把你要索引的資料格式轉化的文字格式,Lucene 就能對你的文件進行索引和搜尋。

    1.2、lucene和solr是什麼關係?

Solr與Lucene 並不是競爭對立關係,恰恰相反Solr 依存於Lucene,因為Solr底層的核心技術是使用Lucene 來實現的,Solr和Lucene的本質區別有以下三點:搜尋伺服器,企業級和管理。Lucene本質上是搜尋庫,不是獨立的應用程式,而Solr是。 Lucene專注於搜尋底層的建設,而Solr專注於企業應用。Lucene不負責支撐搜尋服務所必須的管理,而Solr負責。所以說,一句話概括 Solr: Solr是Lucene面向企業搜尋應用的擴充套件。 Solr使用Lucene並且擴充套件了它!
  • 一個真正的擁有動態欄位(Dynamic Field)和唯一鍵(Unique Key)的資料模式(Data Schema)
  • 對Lucene查詢語言的強大擴充套件!
  • 支援對結果進行動態的分組和過濾
  • 高階的,可配置的文字分析
  • 高度可配置和可擴充套件的快取機制
  • 效能優化
  • 支援通過XML進行外部配置
  • 擁有一個管理介面
  • 可監控的日誌
  • 支援高速增量式更新(Fast incremental Updates)和快照發布(Snapshot Distribution)
因為solr是基於Lucene的,他們底層的概念都是一樣的。讀者如果初學solr,對lucene不瞭解的話,可以先大概瞭解一下lucene。以下有兩篇很好的關於lucene的介紹文章: http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/#ibm-pcon http://www.ibm.com/developerworks/cn/java/wa-lucene/ 為了對文件進行索引,Lucene 提供了五個基礎的類,他們分別是 Document, Field, IndexWriter, Analyzer, Directory。讀完以上兩篇文章,讀者應該瞭解這些基礎類有什麼作用。

2、Solr安裝,配置

Solr是一個Web應用,需要部署在Servlet容器中執行,本例使用Tomcat作為Servlet容器(官方釋出包中示例使用Jetty) 1:下載solr釋出包(本文件以solr4.9為例進行說明) 官網地址:http://lucene.apache.org/solr/ 選擇Past versions標紅的地方,選擇需要使用的solr釋出包,點選下載,或者複製下載地址到迅雷下載都行。 2:解壓下載的釋出包,將solr\solr-4.9.0\example\webapps下的solr.war拷貝到tomcat的webapp目錄下,啟動tomcat(解壓solr.war) 3:在任意位置建立solr_home目錄,比如:E:/solr/solr_home 4:在tomcat的webapp的solr專案中修改web.xml檔案,新增如下配置,預設是註釋的 <env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>E:/solr/solr_home</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> 5:在解壓的solr-4.9.0目錄的如下地址中solr-4.9.0/example/solr/將裡面的所有內容copy到solr_home中 6:將solr-4.9.0\example\lib\ext下的所有的jar包拷貝到apache-tomcat-7.0.54\webapps\solr\WEB-INF\lib下啟動tomcat。 如果啟動報錯,檢查你的tomcat使用的jdk,需要使用jdk1.7+才行。 7:啟動成功後,在瀏覽器中輸入http://localhost:2222/solr 檢查是否能夠訪問。訪問成功後頁面如下: 參考地址: 1:http://my.oschina.net/xiaoen/blog/343816 2:http://blog.csdn.net/zhyh1986/article/details/9856115

3、IK分詞器安裝,配置

1:下載地址:http://git.oschina.net/wltea/IK-Analyzer-2012FF 2:解壓IK Analyzer 2012FF_hf1.zip,獲得IK Analyzer 2012FF_hf1。將該目錄下的IKAnalyzer.cfg.xml,stopword.dic放到之前安裝 TOMCAT_HOME/webapps/solr/WEB-INF/classes目錄下(沒有就建立classes資料夾) IKAnalyzer2012FF_u1.jar放到之前安裝的TOMCAT_HOME/webapps/solr/WEB-INF/lib目錄下 3:修改/solr_home/collection1/conf/中的schema.xml中增加如下內容: <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> 同時修改filed 使filed引用text_ik.這樣才能使用IK分詞器。 <field name="name" type="text_ik" indexed="true" stored="true"/> 4:在solr應用中測試,示例如下圖: 5:修改E:\solr\solr_home\collection1\conf\solrconfig.xml檔案配置生成的索引檔案路徑,示例如下: <dataDir>${solr.data.dir:E:/solr/solr_home/data}</dataDir>

4、solrj查詢介面

1:HttpSolrServer 2:SolrInputDocument 3:SolrQuery 4:QueryResponse 5:SolrDocumentList

5、solr在jetty伺服器上執行

1:確保你的機器上已經安裝了jdk1.6+ 2:使用java –version 檢視你的jdk版本 3:cmd後進入solr的解壓目錄,進入example例如:E:\solr\solr-4.9.0\example 4:使用java –jar start.jar啟動jetty伺服器 5:在瀏覽器位址列中輸入:http://localhost:8983/solr 檢視是否啟動成功。 6:當啟動樣例伺服器的時候,並不會產生太多的問題。最常見的導致伺服器不能啟動的問題是預設的 8983 埠已經被另外的程式佔用。如果是這個問題的話,將會看到類似“java.net.BindException: Address already in use”這樣的異常資訊。這個問題很容易解決,只需要改變 Solr 繫結的埠即可。改變埠可以在啟動的時候通過命令列指定 Jetty 使用的埠:java -Djetty.port=8080 -jar start.jar。使用這個命令後,Jetty 將繫結到 8080 埠。 7:停止 Solr 如果是本地操作,那麼你可以在命令列視窗使用 Ctrl-c 來結束程式。通常,對於開發和測試來說,這已經足夠安全。Jetty 也提供了一個更安全的機制來停止伺服器,這個我們以後再討論。

6、專案引入Solr時應該考慮的一些問題

1、資料更新頻率:每天資料增量有多大,隨時更新還是定時更新 2、資料總量:資料要儲存多長時間 3、一致性要求:期望多長時間內看到更新的資料,最長允許多長時間延遲 4、資料特點:資料來源包括哪些,平均單條記錄大小 5、業務特點:有哪些排序要求,檢索條件 6、資源複用:已有的硬體配置是怎樣的,是否有升級計劃  
  • 參考

本文為原創,如果您當前訪問的域名不是surenpi.com,請訪問“素人派”。

檢視原文:http://surenpi.com/2017/04/28/solr%e4%bb%a5%e5%8f%8aik%e5%88%86%e8%af%8d%e5%99%a8%e7%ae%80%e4%bb%8b/

相關文章