實(shí)驗(yàn)內(nèi)容
使用Solr對(duì)金庸的15本小說(shuō)的每一個(gè)章節(jié)進(jìn)行全文索引曙砂,定位“獨(dú)孤求敗”在小說(shuō)中出現(xiàn)的章節(jié)香伴。
實(shí)驗(yàn)環(huán)境
操作系統(tǒng):Win10專業(yè)版 17134.137
Solr版本:7.3.1
Java版本:1.8.0_172
實(shí)驗(yàn)步驟
1. 啟動(dòng)solr并建立新的core
在solr的根目錄下侣肄,同時(shí)點(diǎn)擊鼠標(biāo)右鍵+shift,在出現(xiàn)的菜單中,選擇在此處打開(kāi)PowerShell窗口屡拨,輸入如下指令啟動(dòng)solr
bin/solr.cmd start
啟動(dòng)完成后攻冷,輸入如下指令建立新core
bin/solr.cmd create -c jinyong
然后在瀏覽器輸入
http://localhost:8983/solr/#/jinyong
即可進(jìn)入solr admin界面娃胆,對(duì)新建的core進(jìn)行管理
tips:在windows下重啟solr需要輸入如下指令
bin/solr.cmd restart -p 8983
2. 添加Ik分詞包和text_ik字段類型
首先進(jìn)入如下目錄
然后,將ik的兩個(gè)Jar包放入lib文件夾等曼,配置文件放入classes文件夾
然后在jinyong這個(gè)core中的manage-shema中加入如下fieldType配置:
<!-- IK字段類型 -->
<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" isMaxWordLength="false" useSmart="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" isMaxWordLength="false" useSmart="false"/>
</analyzer>
</fieldType>
重啟solr里烦,進(jìn)入solr admin界面,查看text_ik字段類型分詞效果禁谦,為了完好的分出“獨(dú)孤求敗”4個(gè)字胁黑,我在ik分詞包的額外詞(ext.dic)中加入了“獨(dú)孤求敗”,在停用詞(stopword.dic)加入了“獨(dú)孤”州泊,“求敗”兩次别厘,以上兩個(gè)文件均在以下目錄中
分詞效果如圖所示:
3. 使用DIH方式導(dǎo)入金庸小說(shuō)的文本文件
為了知道“孤獨(dú)求敗”具體在哪個(gè)章節(jié)中出現(xiàn),先使用章節(jié)分割器將15本小說(shuō)按章節(jié)分開(kāi)拥诡,每本小說(shuō)一個(gè)文件夾触趴,再用編碼轉(zhuǎn)換器,將txt文件編碼轉(zhuǎn)為utf-8渴肉,如圖:
準(zhǔn)備好被索引的文件后冗懦,在solr-7.3.1/server/solr/jinyong/conf目錄下,建立data-config.xml文件仇祭。文件內(nèi)容如下
<dataConfig>
<dataSource name="fileDataSource" type="FileDataSource" />
<document>
<!-- baseDir:被索引文件的位置 fileName:正則匹配文件名 -->
<!-- 索引文件出錯(cuò)時(shí)跳過(guò)該文件 -->
<!-- 遞歸地索引baseDir下的每個(gè)文件夾 -->
<entity name="files" dataSource="null" rootEntity="false"
processor="FileListEntityProcessor"
baseDir="D:\Storage\小說(shuō)\金庸小說(shuō)全集" fileName=".*\.txt"
onError="skip"
recursive="true">
<!-- 將文件信息與相應(yīng)的managed-schema中的field對(duì)應(yīng)起來(lái)披蕉,有id、filePath、size没讲、lastModified眯娱、text這些字段 -->
<field column="file" name="id"/>
<field column="fileAbsolutePath" name="filePath" />
<field column="fileSize" name="size" />
<field column="fileLastModified" name="lastModified" />
<entity processor="PlainTextEntityProcessor" name="txtfile" url="${files.fileAbsolutePath}" dataSource="fileDataSource">
<field column="plainText" name="text"/>
</entity>
</entity>
</document>
</dataConfig>
然后添加相應(yīng)的field到managed-schema文件中(id字段會(huì)默認(rèn)定義,所以不用再重復(fù)定義)
<!-- txt文件定義字段 -->
<field name="text" type="text_ik" indexed="true" stored="true" omitNorms="true" multiValued="false"/>
<field name="fileName" type="string" indexed="true" stored="true" />
<field name="filePath" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="size" type="plong" indexed="true" stored="true" />
<field name="lastModified" type="pdate" indexed="true" stored="true" />
然后在solrconfig.xml文件中定義DIH
先是導(dǎo)入相應(yīng)的jar包爬凑,在如下位置添加以下語(yǔ)句
<!-- 添加DIH包依賴 -->
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
再是再合適位置加入如下定義:
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
重啟solr后徙缴,打開(kāi)solr amdin,在如下界面即可導(dǎo)入文件嘁信,建立索引
然后查看被索引的文件數(shù)
可見(jiàn)文件已經(jīng)被索引成功
4.搜索“孤獨(dú)求敗”出現(xiàn)的位置
構(gòu)造查詢
text:獨(dú)孤求敗
選擇在所有字段高亮于样,如下圖,我們可以發(fā)現(xiàn)一共在九個(gè)文檔中出現(xiàn)了“獨(dú)孤求敗”的字眼潘靖,通過(guò)查詢出來(lái)的filePath穿剖,我們可以知道該詞具體出現(xiàn)在哪本書(shū)的哪個(gè)章節(jié)
5.結(jié)論
由4的搜索結(jié)果我們可以知道,獨(dú)孤求敗共在兩本書(shū)中出現(xiàn)卦溢,《神雕俠侶》與《笑傲江湖》糊余。
而具體的章節(jié)如下:
《神雕俠侶》23、26单寂、27贬芥、32、30
《笑傲江湖》10凄贩、18誓军、21、39