Solr7使用Oracle數據源導入+中文分詞


安裝目錄假設為#solr_home,本文的#solr_home為apps/svr/solr

 一、Oracle數據導入

1. 在#solr_home/server/solr下新建文件夾,假設為mjd;

2. 將#solr_home/server/solr/configsets/_default下的conf文件夾拷貝到#solr_home/server/solr/mjd;

3.打開mjd/conf下的solrconfig.xml添加節點;

<lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/" regex=".*\.jar">
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar">

4. 同樣上面那個文件,增加節點;

<requestHandler name="/dataimport" class="org.apche.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</list>
</requestHandler>

5. 下載ojdbc6.jar到#solr_home/contrib/dataimporthandler/中,我是在http://vdisk.weibo.com/s/z8ZZMoqsgpNFH中下載的;

6. 在#solr_home/server/solr/mjd/conf下新建文件data-config.xml,打開,將下列配置復制;

<dataConfig>
    <dataSource driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.2.218:1521:product " user="數據庫用戶名" password="數據庫密碼" />
    <document name=”product” pk=”主鍵”>
        <entity name="bless" query="select * from bless"<--這里配查詢語句-->
deltaImportQuery="SELECT * FROM userinfo where spuid='${dih.delta.spuid}'" 
                deltaQuery="select bless_id from bless where bless_time > '${dataimporter.last_index_time}'"><--這里配增量查詢語句,${dataimporter.last_index_time}表示上次更新時間-->
        </entity>
    </document>
</dataConfig>

7. 進入web管理頁面 localhost:8983/solr/#,點擊Core Admin菜單,點擊AddCore,將name和instanceDir設置為剛才我們第一步新建的文件夾名稱;

8. 在菜Thread Dump下方有一個下拉框,選擇剛新建的Core,點擊Schema 里的Add field菜單,name輸入剛才配置的查詢語句中的某個字段(假設該字段為字符串類型),點擊field type,選擇text_gerneral,點擊下面的添加按鈕;

9. 回到左側菜單,選擇Dataimport,點擊Execute菜單;

10. 回到左側菜單,選擇Query,點擊Execute Query,如果右側查詢出數據,恭喜你,你已經配置好了;

可根據第八步繼續添加自己想要的字段,重復9 10步驟;

 

二、中文分詞

Solr7之前好像大部分使用的是IK中文分詞器,但是我試了好幾個方法,都沒有成功,而且跟網上經驗描述的目錄結構也很多不一樣,比如大部分說要修改Schema.xml文件,可是后來發現Solr7其實已經不使用Schema了,而是使用的Managed-Schema文件,

而且這里有個問題就是,當重啟Solr服務器后,項目中的這個文件會被覆蓋掉,目前還沒有找到是從哪里拷貝過來的模板。進入正題:

1. 進入#solr_home/contrib/analysis-extras/lucene-libs,找到lucene-analyzers-smartcn-7.0.1.jar,復制到#solr_home/server/solr-webapp/webapp/WEB-INF/lib下;

2. 打開#solr_home/server/solr/configsets/_default/conf下的managed-schema,在文件后面加上如下節點

<!-- ChineseAnalyzer -->
    <fieldType name="text_cn_splitting" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      </analyzer>
    </fieldType>

 3.重啟solr服務;

4.在第一部分第8步的時候,Add Field的時候,看是否有text_cn_splitting類型可選,如果有的話,那在add field的時候將需要進行中文分詞的字段選擇該類型即可;

 

 定時任務:

使用系統的定時任務執行 curl

http://your_ip/dataimport?command=full-import&clean=true&commit=true 全量導入

http://your_ip/dataimport?command=delta-import&clean=false&commit=true 差異導入

這里clean參數如果是true,會把之前的數據清空掉,然后導入差異的數據,在差異性導入時注意這個參數,不然會把solr里的數據清空,然后導入差異性的數據(這個差異是清空前的差異),導致數據缺失;

建議訪問低頻時重建全量索引,如每天凌晨4點做一次全量導入,每10分鍾做一次差異導入

 

FQA:

1.增量導入是以主鍵作為增量差異,默認這個主鍵是id,需要在managed-schema里修改uniqueKey節點成需要的主鍵,且在該文件里定義的主鍵必須是string類型的,如下圖

 2. 如果需要設置單字段索引,而不每個字段都去檢索,比如有數據字段author,title,keywords,body,搜索的時候想搜索這四個字段,可以使用copyField字段,具體方法,在managed-schema中添加如下節點

3. Solr7中已經不再支持defaultSearchField默認搜索字段了。需要設置默認搜索字段需要在solrconfig.xml中配置,

 

參考資料:

https://www.cnblogs.com/LUA123/p/7783102.html

http://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-7.0.pdf

https://wiki.apache.org/solr/DataImportHandler

 

本文原創,轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM