Solr配置ik分詞器(擴展詞,停用詞)同時進行同義詞解析


Solr5.5.5版本+IK Analysis的詞典及同義詞配置

我的Solr5.5.5是采用Jetty方法進行配置的

主要是配置三個文件

  • /usr/solr/solr-5.5.5/server/solr/mycore(自己定義的core)/conf/schema.xml
    • 配置域,自定義各種數據,並關聯solr里面的數據
  • /usr/solr/solr-5.5.5/server/solr/mycore(自己定義的core)/conf/solrconfig.xml
    • 定義了一些solr的處理規則,基礎配置文件
    • 索引數據的存放位置
    • 更新,刪除,查詢的一些規則配置
  • /usr/solr/solr-5.5.5/server/solr/mycore(自己定義的core)/conf/data-config.xml(這個文件自己創建一個添加進去就好)
    • 這個是solr關聯數據庫的一個文件

廢話不多說,上代碼

首先出場的是:data-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
	<!--數據庫-->
	<dataSource name="test" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" 
	url="jdbc:mysql://localhost:3306/test"  user="root" password="password"/>
	<document name="user">
        	<!--用戶表-->
		<entity dataSource="test" name="user" pk="id" query="select * from user">
			<field column="id" name="id"/>
			<field column="title" name="title"/>
		</entity>
		<!--如果要添加同一個數據庫下的其他操作的話按照這個格式即可-->
		<entity dataSource="test" name="xxxx" pk="xxxx" query="xxxxxx">
			<field column="xxxx" name="xxx"/>
			<field column="xxxxxx" name="xxxxx"/>
		</entity>
	</document>
</dataConfig>

踩坑點:

  • dataSource標簽中的name必須和下面entity標簽中的dataSource屬性對應
  • 一個dataSource下面只能有一個document但是可以有多個entity
  • entity在配置的時候記得配置上主鍵(PK)
  • entity中的每一個column都記得在schema.xml中配置

緊接着:schema.xml

<!-- 對數據庫中的字段進行配置 -->
<field name="title" type="text_iksyn" indexed="true" stored="true" />
<!-- 同義詞&IK分詞 -->
<field name ="text" type ="text_iksyn" indexed ="true" stored ="false" multiValued ="true"/>
<fieldType name="text_iksyn" class="solr.TextField">
    <analyzer type="index" positionIncrementGap="100" autoGeneratePhraseQueries="true">
	<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" isMaxWordLength="false"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    </analyzer>
    <analyzer type="query">
    	<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" isMaxWordLength="false" />
    	<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
	<filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

踩坑點:

  • 對數據庫中的字段配置真的是很有必要的!!!並且如果你想要后面的某個屬性進行分詞的話一定要指定他的type和后面配置的ik分詞器中的一樣!!!!!
  • IK分詞的時候注意上面的class一定不要錯,不然到時候Reload的時候必報錯
  • index和query兩個最好都配置上
  • 注意在配置同義詞的時候這個synonyms一定要對應好同義詞詞典
  • LowerCaseFilterFactory是一個配置不區分大小寫的,可有可無

配置完這兩個之后可以順便把同義詞詞典給弄一下,見下面兩幅圖:

踩坑點:
保存的時候務必是utf-8,不然你會發現白弄了
可以用=>來進行配置,但是這樣的話只能是左邊等同於右邊,比如輸入還行會出來還可以,但是輸入還可以那么還是還可以(這不是繞口令)
可以用英文的逗號進行分割,切記英文逗號!這樣的配置可以等價替換

最后就是solrconfig.xml

<!-- 隨便找個地方加上就好 -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler" >
    <lst name="defaults">
      <str name="config">data-config.xml</str>
    </lst>
</requestHandler>

截至到此差不多就可以啦,可別說你不知道ik該放在什么目錄!好吧,起始剛開始我也不知道(/▽\=)

IK分詞器怎么配置

將IK的jar包放到/usr/solr/solr-5.5.5/server/solr-webapp/webapp/WEB-INF/lib目錄下
將ext.dic、IKAnalyzer.cfg.xml、stopword.dic復制到/usr/solr/solr-5.5.5/server/solr-webapp/webapp/WEB-INF/classes目錄下(classes自行創建)
IKAnalyzer.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>

踩坑點:
擴展詞詞典和停用詞詞典一定要是utf-8格式的!
在剛下載下來的ext.dic配置擴展詞詞典的那句話是被注釋掉的!千萬記得去看一眼,一眼就好!

q(≧▽≦q)這下真的就結束啦!感謝觀看!歡迎指正!


免責聲明!

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



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