1 什么是solr
Solr 是Apache下的一個頂級開源項目,采用Java開發,它是基於Lucene的全文搜索服務器。Solr可以獨立運行在Jetty、Tomcat等這些Servlet容器中。
Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴展,並對索引、搜索性能進行了優化。
使用Solr 進行創建索引和搜索索引的實現方法很簡單,如下:
* 創建索引:客戶端(可以是瀏覽器可以是Java程序)用 POST 方法向 Solr 服務器發送一個描述 Field 及其內容的 XML 文檔,Solr服務器根據xml文檔添加、刪除、更新索引 。
* 搜索索引:客戶端(可以是瀏覽器可以是Java程序)用 GET方法向 Solr 服務器發送請求,然后對Solr服務器返回Xml、json等格式的查詢結果進行解析,組織頁面布局。Solr不提供構建頁面UI的功能,但是
提供了一個管理界面,通過管理界面可以查詢Solr的配置和運行情況。
簡單來說:Solr類似我們開發的web項目,是一個war包,把它放在tomcat下直接運行就好
2 Solr和Lucene的區別
Lucene是一個開放源代碼的全文檢索引擎工具包,它不是一個完整的全文檢索應用。Lucene僅提供了完整的查詢引擎和索引引擎,目的是為軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者以Lucene為基礎構建全文檢索應用。
Solr的目標是打造一款企業級的搜索引擎系統,它是基於Lucene一個搜索引擎服務,可以獨立運行,通過Solr可以非常快速的構建企業的搜索引擎,通過Solr也可以高效的完成站內搜索功能。
簡單來說:如果不知道Lucene,那么配置Solr方面將寸步難行
這里是一篇以前寫的Lucene的使用案列:http://www.cnblogs.com/xuyiqing/p/8696660.html
有一個問題:我們可以使用數據庫查詢,為什么要用Solr呢?
答案:最大的一個原因是效率會高 很 多 ,還有其他原因,比如SQL無法做到相關度排序等等
另一個問題:我們為什么不用Lucene呢?
答案:Lucene的工作量過大,Solr是基於Lucene的框架,便捷完善,可配置可擴展,可以高效完成站內搜索功能
接下來就開始:
搭建solr服務器(Tomcat):
注意:solr本身可以運行,不過它是運行在jetty上的,相比Tomcat顯得不穩定,所以我們要在tomcat中搭建Solr
准備一個Tomcat7和Solr4.10.3:網上下載即可
按這個路徑找到solr.war復制到Tomcat的webapp下
然后把這個war包解壓了:注意解壓后把war包刪了,因為solr文件夾里要添加其他東西,但是Tomcat每次啟動都會解壓war包覆蓋,所以需要刪了war包
按目錄找到這5個包:
把它們復制到這個文件夾中:
接下來:在剛才的文件夾下新建一個文件夾:solrhome(充當索引庫)
把這個路徑的這些東西復制過去:
然后修改下這個配置文件:
在40行處修改如下:
好的,啟動Tomcat:
我訪問8080:
到這里,搭建就成功了!
在這個頁面就可以增刪改查索引了!
比如增(注意必須有id):
查:
但是還沒有結束:
接下來修改配置文件:
打開這里:我們需要關注的是這兩個配置文件
好的,接下來就配置它們:
schema.xml:配置域相關的信息
可以打開看看,里面是域的相關信息,只有里面存在的域才可以使用!
當然,里面還有一種動態域,比如*_s,*_i等等,前綴可以任意寫
看看另一個配置文件:
這里要配置中文分詞器
先導入這個包:
新建一個文件夾放入IK分析器配置文件:
這三個配置文件Lucene文章中:http://www.cnblogs.com/xuyiqing/p/8696660.html
注意三個文件的格式:UTF-8無BOM格式編輯
接下來:在剛才提到的schema.xml中配置:加上這一段
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> <field name="title_ik" type="text_ik" indexed="true" stored="true"/> <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
新建的這兩個域支持IK分析器
測試下:重啟Tomcat
分析成功!
接下來,介紹下如何從數據庫導入數據:
首先,導入包(注意位置):
打開上面提到過的solrconfig.xml配置文件:
加入下面這些代碼:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
在當前目錄下新建一個data-config.xml:
這里導入以前我做的BBS項目中用戶的表
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/Blog" user="root" password="xuyiqing"/> <document> <entity name="user" query="select * from blog_user" > <field column="u_id" name="id"></field> <field column="username" name="username"></field> <field column="u_password" name="password"></field> <field column="qq" name="qq"></field> <field column="avatar" name="avatar"></field> <field column="article_count" name="count"></field> </entity> </document> </dataConfig>
只寫這些不夠的,還要在schema.xml中配置域:
<field name="username" type="text_ik" indexed="true" stored="true"/> <field name="password" type="text_ik" indexed="false" stored="false"/> <field name="qq" type="text_ik" indexed="true" stored="true"/> <field name="avatar" type="string" indexed="false" stored="true"/> <field name="count" type="float" indexed="true" stored="true"/>
保存!重啟tomcat
導入成功!
我們查詢一下(成功):
可以按條件查詢:
到這里搭建Solr就成功了
SolrJ:通過SorlJ的API操作Solr:
陸續更新
如果有大佬願意打賞,感謝: