一:Solr簡介
Solr是一個獨立的企業級搜索應用服務器,它對外提供類似於Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。
Solr是一個高性能,採用Java5開發,
Solr
基於Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更爲豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎
二:Solr服務器的搭建
步驟:
(1)從solr官網下載http://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/8.0.0/solr-8.0.0.tgz下載
(2)配置java環境變量,jdk8
(3)解壓下載的壓縮包
進入bin目錄
啓動之後localhost:8983進入管理頁面
點擊coreadmin進入創建核心的頁面
點擊addCore之前,首先要在 solr文件夾下創建和instanceDir同名的文件夾
同時把solr-8.0.0\server\solr\configsets\_default下的conf文件夾拷貝到新建的new_core文件夾下,然後點擊addcore,則新建成功。
在solr管理頁面的coreselector中就可以找到新建new_core核心。
三:Solr服務器配置中文分詞器
步驟:
(1)拷貝中文分詞器ik-analyzer-solr5-5.x.jar到server\solr-webapp\webapp\WEB-INF\lib文件夾下
(2)在Solr中的server\solr-webapp\webapp\WEB-INF下面創建classes文件目錄,用於存放中文分詞器的分詞配置
ext.dic的內容,比如如下:
高富帥
黑馬程序員
二維表
這樣的話,碰到這樣的詞就不會進行拆分了,所以,一些網絡新詞就可以在這裏進行配置。
IKAnalyer.cfg.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴展配置</comment>
<!--用戶可以在這裏配置自己的擴展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用戶可以在這裏配置自己的擴展停止詞字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
stopwords.dic內容:
我
是
的
a
an
and
are
as
這樣的話,對於上面的字就不會進行顯示處理了,因爲這些都是沒有意義的詞彙。
(3)在覈心solr家中,找到配置文件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"/
(4)重啓solr start,進行測試是否配置完成。
(5)訪問Solr主頁,進行測試
四:Solr導入數據
(1)增加jar包,在server\solr\new_core\文件夾下創建lib包,把
放進去
(2)創建配置文件
在server\solr\new_core\conf 中創建data-config.xml文件,
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8"
user="root"
password="admin"/>
<document>
<entity name="product" query="SELECT id,name FROM product">
<field column="id" name="id" />
<field column="name" name="name" />
</entity>
</document>
</dataConfig>
把data-config.xml配置到solrconfig.xml中,
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
(3)導入數據,
重新啓動solr,在管理頁面
entity中就是配置對象。
點擊execute按鈕把數據庫中數據導入到solr服務器中。可以勾選auto-refresh status進行實時處理。
至此導入數據完成
進行測試,但是發現一個問題,就是那麼沒有出來,只有id。
最後發現了,原來是我在date-config.xml中配置了name這個字段,在managed-schema沒有配置
<field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
加上這句,最後測試正常了。後來發現這樣配置還是有問題,不能檢索,如果我name的值是中國人在西邊中的瓜,我用中國人來檢索卻檢索不出來,後來發現
<field name="name" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
中的type應該是中文分詞類型。
對於java編程部分,參考上一遍solr文章