本教程是從別人的基礎上借鑑整理的html
Solr是一個獨立的企業級搜索應用服務器,它對外提供API接口。用戶能夠經過http請求,向搜索引擎服務器提交必定格式的XML文件,生成索引(solr生成倒排索引,數據庫生成的索引是二叉樹索引,效率差距很大);也能夠經過Http Get操做提出查找請求,並獲得XML格式的返回結果。Solr是一個相似於Google或者Bing的全文檢索引擎, Solr是與搜索引擎優化(SEO)相關聯的。不少公司也使用elasticsearch做爲搜索引擎。
java
準備:tomcat7.0版本,solr5.3.0版本
目前網絡上對solr3.x和4.x的安裝介紹比較多,這裏使用新的5.3.1版本進行安裝介紹。
一、下載tomcat和solr壓縮包並解壓;
二、將 solr 壓縮包中 solr-5.3.0\server\solr-webapp\文件夾下有個webapp文件夾,將之複製到Tomcat\webapps\目錄下,文件夾名改爲solr ;
三、將 solr 壓縮包中 solr-5.3.0\server\lib\ext 中的 jar 所有複製到 Tomcat\ webapps\solr\WEB-INF\lib 目錄中;
四、將 solr 壓縮包中 solr-5.3.0/ server/resources /log4j.properties 複製到Tomcat\ webapps\solr\WEB-INF\lib 目錄中;
五、將 solr 壓縮包中 solr-5.3.0/server/solr 目錄複製到計算機某個目錄下,如D:\testsolr\solr_home(solr建立的core到時會存放在該目錄下);
六、打開Tomcat/webapps/solr/WEB-INF下的web.xml,找到以下配置內容(初始狀態下該內容是被註釋掉的):mysql
<env-entry><env-entry-name>solr/home</env-entry-name><env-entry-value>D:/testsolr/solr_home/solr</env-entry-value><env-entry-type>java.lang.String</env-entry-type></env-entry>web
將 env-entry-value 中的內容改爲你的solr_home路徑(第5步的文件),這裏是D:/testsolr/solr_home/solr;
七、保存關閉,然後啓動tomcat,在瀏覽器輸入http://localhost:8080/solr便可出現Solr的管理界面,以下: sql
一、將solr-5.3.0/dist中的solr-dataimporthandler、solr-dataimporthandler-extras的jar包copy到tomcat\webapps\solr\WEB-INF\lib下;
二、在D:\testsolr\solr_home\solr下建立my_core文件夾(名稱與下圖的instanceDir一致,建議下圖中的name也和該文件夾名一致);
三、在my_core文件夾下建立data和conf文件夾;
四、將solr-5.3.0\example\example-DIH\solr\solr\conf全部文件和文件夾都copy到D:\testsolr\solr_home\solr\my_core\conf下;
五、啓動tomcat,訪問solr,建立core,以下
如此,新增core便可完成;
六、能夠在「core selector」這裏查詢和編輯你的solr相關信息;數據庫
這裏使用的是mmseg4j 分詞,該jar包網上下載的廣泛有問題,不能正常使用。經測試,該版本能夠,下載地址:http://download.csdn.net/detail/u012385190/9550326;
一、將文件裏的jar包拷貝到Tomcat\webapps\solr\WEB-INF\lib下;
二、在 D:\testsolr\solr_home\solr\ 目錄下新建一個 dic 文件夾 , 把 新下載的詞庫(data文件夾下)拷貝到 dic 目錄下;
三、在 D:\testsolr\solr_home\solr\my_core\conf\schema.xml 文件的裏添加以下:apache
<fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100"><analyzer><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="D:/testsolr/solr_home/solr/dic"></tokenizer></analyzer></fieldtype><fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100"><analyzer><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="maxword" dicPath="D:/testsolr/solr_home/solr/dic"></tokenizer></analyzer></fieldtype><fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100"><analyzer><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="D:/testsolr/solr_home/solr/dic"></tokenizer></analyzer></fieldtype>json
這裏不一樣的name選用不一樣的分詞方式;
其中dicPath屬性的值爲第二步的地址,不要寫錯哦;
四、在 D:\testsolr\solr_home\solr\my_core\conf\schema.xml 文件裏添加以下 :瀏覽器
<field name="name" type="textMaxWord" indexed="true" stored="true" multiValued="true" />
<field name="description" type="textMaxWord" indexed="true" stored="true" multiValued="true" />
五、開啓服務以下進行分詞測試,以下圖分詞:
以下圖所示root字段是沒有分詞的結果:
在過程當中出現以下錯誤,是由於字段重複,在schema.xml中將另外一個content字段的配置註釋掉便可(name同理)。
六、如此,分詞oktomcat
接下來進行solr鏈接數據庫,生成索引,以及查詢方法。
數據庫建表語句:
CREATE TABLE `test_person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL COMMENT '姓名', `description` varchar(500) DEFAULT NULL COMMENT '簡介', PRIMARY KEY (`id`) );
insert into test_person(name,description) values('周星馳','香港著名喜劇演員');
insert into test_person(name,description) values('周潤發','香港著名演員');
insert into test_person(name,description) values('周節能','臺灣著名歌手,號稱音樂天王');
insert into test_person(name,description) values('成龍','香港著名動做演員');
insert into test_person(name,description) values('山本一木','日本鬼子');
insert into test_person(name,description) values('倉木麻衣','日本歌手');
一、將數據庫驅動包放入solr項目工程中(我用的MySQL,使用jar包mysql-connector-java-5.1.18-bin.jar);
二、在本身建立的core實例的conf文件中進行數據配置(個人是D:\testsolr\solr_home\solr\my_core\conf\solr-data-config.xml),覆蓋內容以下(數據庫表本身根據配置本身建):
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="jhp123" />
<document name="messages">
<entity name="message" transformer="ClobTransformer" query="select * from test_peoson where name like '%${dataimporter.request.name}%'">
<field column="id" name="id" />
<field column="name" name="name" />
<field column="description" name="description" />
</entity>
</document>
</dataConfig>
url=」jdbc:mysql://localhost:3306/test」 user=」root」 password=」123」 這裏配置了 mysql 的鏈接路徑 , 用戶名 , 密碼
<field column="name" name="name" /> 這裏配置的是數據庫裏要索引的字段, 注意name是在分詞的第4 步配置的,同時只有這樣匹配的字段最終solr纔會查詢顯示出來,因此須要用到的字段必須在該文件中<field column="***" name="***" />配置才能夠;
三、在D:\testsolr\solr_home\solr\my_core\conf\schema.xml文件中添加以下字段信息:
<field name="name" type="textMaxWord" indexed="true" stored="true" multiValued="true" />
<field name="description" type="textMaxWord" indexed="true" stored="true" multiValued="true" />
注意這裏的配置是數據庫裏須要用到的字段,在分詞時這兩個字段已配置,故此步可省略。其中id字段已存。
四、在 D:\testsolr\solr_home\solr\my_core\conf 目錄下的 solrconfig.xml 文件裏 , 添加以下代碼 :
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">D:/testsolr/solr_home/solr/my_core/conf/solr-data-config.xml</str>
</lst>
</requestHandler>
D:/testsolr/solr_home/solr/my_core/conf/solr-data-config.xml爲上一步的配置文件地址;
五、把本地下載解壓的 solr文件裏dist 目錄下的 solr-dataimporthandler.jar 和 solr-dataimporthandler-extras.jar 複製到Tomcat \webapps\solr\WEB-INF\lib 目錄下;
六、如圖打開solr,把數據庫(其實也能夠用 http/file 資源)中的記錄放到索引中。現大概看下步驟:
七、測試查詢:
八、solr查詢參數詳解,以下圖所示
如圖所示對圖中的參數進行解釋:
qt :(query type)指定那個類型來處理查詢請求,通常不用指定,默認是standard;
q : 查詢的關鍵字,此參數最爲重要,例如圖中表示查詢全部字段中含有「周星馳」三個字中的至少某一個字的數據;
fq :(filter query)過慮查詢,提供一個可選的篩選器查詢。返回在q查詢符合結果中同時符合的fq條件的查詢結果,例如:q=id:1&fq=sort:[1 TO 5],找關鍵字id爲1 的,而且sort是1到5之間的;
sort : 排序方式,例如id desc 表示按照 「id」 降序;
rows :指定返回結果最多有多少條記錄,默認值爲 10,配合start實現分頁;
fl : 指定返回哪些字段,用逗號或空格分隔,注意:字段區分大小寫,例如,fl= id,title,sort,默認返回數據配置文件中file的字段;
df 默認的查詢字段,通常默認指定。好比df爲name,q爲周星馳,則搜索name中含有周星馳」三個字中的至少某一個字的數據;
wt:返回類型,有json、XML等;
hl:高亮顯示;
facet:分組,其中facet.query表示全部的索引中含有該內容的數據有多少條,facet.field和facet.prefix須要結合,表示字段facet.field含有facet.prefix的內容共有多少條;
solr查詢參數具體參考:http://www.cnblogs.com/zhangweizhong/p/5056884.html
solr在Java中的使用:http://blog.csdn.net/u012385190/article/details/53115546
Solr是一個獨立的企業級搜索應用服務器,它對外提供API接口。用戶能夠經過http請求,向搜索引擎服務器提交必定格式的XML文件,生成索引(solr生成倒排索引,數據庫生成的索引是二叉樹索引,效率差距很大);也能夠經過Http Get操做提出查找請求,並獲得XML格式的返回結果。Solr是一個相似於Google或者Bing的全文檢索引擎, Solr是與搜索引擎優化(SEO)相關聯的。不少公司也使用elasticsearch做爲搜索引擎。
準備:tomcat7.0版本,solr5.3.0版本
目前網絡上對solr3.x和4.x的安裝介紹比較多,這裏使用新的5.3.1版本進行安裝介紹。
一、下載tomcat和solr壓縮包並解壓;
二、將 solr 壓縮包中 solr-5.3.0\server\solr-webapp\文件夾下有個webapp文件夾,將之複製到Tomcat\webapps\目錄下,文件夾名改爲solr ;
三、將 solr 壓縮包中 solr-5.3.0\server\lib\ext 中的 jar 所有複製到 Tomcat\ webapps\solr\WEB-INF\lib 目錄中;
四、將 solr 壓縮包中 solr-5.3.0/ server/resources /log4j.properties 複製到Tomcat\ webapps\solr\WEB-INF\lib 目錄中;
五、將 solr 壓縮包中 solr-5.3.0/server/solr 目錄複製到計算機某個目錄下,如D:\testsolr\solr_home(solr建立的core到時會存放在該目錄下);
六、打開Tomcat/webapps/solr/WEB-INF下的web.xml,找到以下配置內容(初始狀態下該內容是被註釋掉的):
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:/testsolr/solr_home/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
將 env-entry-value 中的內容改爲你的solr_home路徑(第5步的文件),這裏是D:/testsolr/solr_home/solr;
七、保存關閉,然後啓動tomcat,在瀏覽器輸入http://localhost:8080/solr便可出現Solr的管理界面,以下:
一、將solr-5.3.0/dist中的solr-dataimporthandler、solr-dataimporthandler-extras的jar包copy到tomcat\webapps\solr\WEB-INF\lib下;
二、在D:\testsolr\solr_home\solr下建立my_core文件夾(名稱與下圖的instanceDir一致,建議下圖中的name也和該文件夾名一致);
三、在my_core文件夾下建立data和conf文件夾;
四、將solr-5.3.0\example\example-DIH\solr\solr\conf全部文件和文件夾都copy到D:\testsolr\solr_home\solr\my_core\conf下;
五、啓動tomcat,訪問solr,建立core,以下
如此,新增core便可完成;
六、能夠在「core selector」這裏查詢和編輯你的solr相關信息;
這裏使用的是mmseg4j 分詞,該jar包網上下載的廣泛有問題,不能正常使用。經測試,該版本能夠,下載地址:http://download.csdn.net/detail/u012385190/9550326;
一、將文件裏的jar包拷貝到Tomcat\webapps\solr\WEB-INF\lib下;
二、在 D:\testsolr\solr_home\solr\ 目錄下新建一個 dic 文件夾 , 把 新下載的詞庫(data文件夾下)拷貝到 dic 目錄下;
三、在 D:\testsolr\solr_home\solr\my_core\conf\schema.xml 文件的裏添加以下:
<fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="D:/testsolr/solr_home/solr/dic">
</tokenizer>
</analyzer>
</fieldtype>
<fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="maxword" dicPath="D:/testsolr/solr_home/solr/dic">
</tokenizer>
</analyzer>
</fieldtype>
<fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="D:/testsolr/solr_home/solr/dic">
</tokenizer>
</analyzer>
</fieldtype>
這裏不一樣的name選用不一樣的分詞方式;
其中dicPath屬性的值爲第二步的地址,不要寫錯哦;
四、在 D:\testsolr\solr_home\solr\my_core\conf\schema.xml 文件裏添加以下 :
<field name="name" type="textMaxWord" indexed="true" stored="true" multiValued="true" />
<field name="description" type="textMaxWord" indexed="true" stored="true" multiValued="true" />
五、開啓服務以下進行分詞測試,以下圖分詞:
以下圖所示root字段是沒有分詞的結果:
在過程當中出現以下錯誤,是由於字段重複,在schema.xml中將另外一個content字段的配置註釋掉便可(name同理)。
六、如此,分詞ok
接下來進行solr鏈接數據庫,生成索引,以及查詢方法。
數據庫建表語句:
CREATE TABLE `test_person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL COMMENT '姓名', `description` varchar(500) DEFAULT NULL COMMENT '簡介', PRIMARY KEY (`id`) );
insert into test_person(name,description) values('周星馳','香港著名喜劇演員');
insert into test_person(name,description) values('周潤發','香港著名演員');
insert into test_person(name,description) values('周節能','臺灣著名歌手,號稱音樂天王');
insert into test_person(name,description) values('成龍','香港著名動做演員');
insert into test_person(name,description) values('山本一木','日本鬼子');
insert into test_person(name,description) values('倉木麻衣','日本歌手');
一、將數據庫驅動包放入solr項目工程中(我用的MySQL,使用jar包mysql-connector-java-5.1.18-bin.jar);
二、在本身建立的core實例的conf文件中進行數據配置(個人是D:\testsolr\solr_home\solr\my_core\conf\solr-data-config.xml),覆蓋內容以下(數據庫表本身根據配置本身建):
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="jhp123" />
<document name="messages">
<entity name="message" transformer="ClobTransformer" query="select * from test_peoson where name like '%${dataimporter.request.name}%'">
<field column="id" name="id" />
<field column="name" name="name" />
<field column="description" name="description" />
</entity>
</document>
</dataConfig>
url=」jdbc:mysql://localhost:3306/test」 user=」root」 password=」123」 這裏配置了 mysql 的鏈接路徑 , 用戶名 , 密碼
<field column="name" name="name" /> 這裏配置的是數據庫裏要索引的字段, 注意name是在分詞的第4 步配置的,同時只有這樣匹配的字段最終solr纔會查詢顯示出來,因此須要用到的字段必須在該文件中<field column="***" name="***" />配置才能夠;
三、在D:\testsolr\solr_home\solr\my_core\conf\schema.xml文件中添加以下字段信息:
<field name="name" type="textMaxWord" indexed="true" stored="true" multiValued="true" />
<field name="description" type="textMaxWord" indexed="true" stored="true" multiValued="true" />
注意這裏的配置是數據庫裏須要用到的字段,在分詞時這兩個字段已配置,故此步可省略。其中id字段已存。
四、在 D:\testsolr\solr_home\solr\my_core\conf 目錄下的 solrconfig.xml 文件裏 , 添加以下代碼 :
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">D:/testsolr/solr_home/solr/my_core/conf/solr-data-config.xml</str>
</lst>
</requestHandler>
D:/testsolr/solr_home/solr/my_core/conf/solr-data-config.xml爲上一步的配置文件地址;
五、把本地下載解壓的 solr文件裏dist 目錄下的 solr-dataimporthandler.jar 和 solr-dataimporthandler-extras.jar 複製到Tomcat \webapps\solr\WEB-INF\lib 目錄下;
六、如圖打開solr,把數據庫(其實也能夠用 http/file 資源)中的記錄放到索引中。現大概看下步驟:
七、測試查詢:
八、solr查詢參數詳解,以下圖所示
如圖所示對圖中的參數進行解釋:
qt :(query type)指定那個類型來處理查詢請求,通常不用指定,默認是standard;
q : 查詢的關鍵字,此參數最爲重要,例如圖中表示查詢全部字段中含有「周星馳」三個字中的至少某一個字的數據;
fq :(filter query)過慮查詢,提供一個可選的篩選器查詢。返回在q查詢符合結果中同時符合的fq條件的查詢結果,例如:q=id:1&fq=sort:[1 TO 5],找關鍵字id爲1 的,而且sort是1到5之間的;
sort : 排序方式,例如id desc 表示按照 「id」 降序;
rows :指定返回結果最多有多少條記錄,默認值爲 10,配合start實現分頁;
fl : 指定返回哪些字段,用逗號或空格分隔,注意:字段區分大小寫,例如,fl= id,title,sort,默認返回數據配置文件中file的字段;
df 默認的查詢字段,通常默認指定。好比df爲name,q爲周星馳,則搜索name中含有周星馳」三個字中的至少某一個字的數據;
wt:返回類型,有json、XML等;
hl:高亮顯示;
facet:分組,其中facet.query表示全部的索引中含有該內容的數據有多少條,facet.field和facet.prefix須要結合,表示字段facet.field含有facet.prefix的內容共有多少條;
solr查詢參數具體參考:http://www.cnblogs.com/zhangweizhong/p/5056884.html
solr在Java中的使用:http://blog.csdn.net/u012385190/article/details/53115546