solr配置同義詞、專有詞的注意點

基於solr 6.5.0 版本

1. Solr配置同義詞報異常

報錯信息

xxx: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: 
Could not load conf for core xxx: Can't load schema /www/solrhome/xxx/conf
/managed-schema: java.nio.charset.MalformedInputException: Input length = 1

在這裏插入圖片描述


解決

在報該異常之前,對solr進行了同義詞的配置,根據該異常信息,覺得可能是中文配置的問題,因爲在conf/synonyms.txt文件中做了如下中文配置:


在這裏插入圖片描述


查詢相關文檔,發現可能是synonyms.txt文件的編碼格式不是UTF-8導致的,使用notepad++工具查看該文件的編碼格式:

在這裏插入圖片描述

接下來通過notepad工具將該文件的編碼格式改爲 UTF-8並保存,放進conf文件夾替換原有的synonyms.txt文件,重啓tomcat,異常解決

注意: 這裏要注意synonyms.txt文件不要直接打開編輯

2. Solr配置同義詞無效

在[solr-core]/conf/managed-schema 文件做如下配置,synonyms負責配置同義詞

	<fieldType name="text_ik" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
			<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
			<charFilter class="solr.HTMLStripCharFilterFactory" /> 
        </analyzer>
    </fieldType>

在synonyms.txt文件裏做了如下配置:

有關 => 關於
土增,土增稅,土地增值稅

看下效果,發現並沒有搜出同義詞,這是爲什麼呢?會不會是同義詞被分詞所導致的,試着將同義詞配置到專有詞裏

在這裏插入圖片描述

在專有詞的文件ext.dic 存入專有詞

土增
土增稅
土地增值稅

這時同義詞就能被搜出來了

在這裏插入圖片描述

3. solr配置高亮詞、摘要的長度

solr配置高亮詞,可通過solrJ庫進行獲取


	SolrQuery solrQuery = new SolrQuery();
	solrQuery.setQuery("keydown:" + keyword)  //搜索的關鍵詞
			.setRows(sp.getPageSize())    	 //頁數
			.setStart(sp.getStartNum())      //頁碼
			.setHighlightFragsize(120)       //高亮摘要句子的長度
			.addSort("score",ORDER.desc)     //排序
			.addSort("issueDate", ORDER.desc)
			.addSort("type",ORDER.asc)
			.addHighlightField(wenhao)		//需要設置高亮的字段
			.addHighlightField(name)
			.addHighlightField(content)
			.setHighlightSimplePre("<span style=\"color:red\">")  //配置高亮的前綴
			.setHighlightSimplePost("</span>");					  //配置高亮的後綴

也可以通過solr目錄下的/conf/solrconfig.xml文件進行配置:


	<requestHandler name="/select" class="solr.SearchHandler">
      <lst name="defaults">
         <str name="echoParams">explicit</str>
         <int name="rows">10</int>	   
         <str name="defType">edismax</str>
	  <str name="qf">name^20 descripe^2 text ^2</str>
	  <str name="hl.usePhraseHighlighter">false</str>
	 <str name="hl.useFastVectorHighlighter">true</str>
	 <str name="hl.boundaryScanner">breakIterator</str>
	  <str name="hl.encoder">html</str>
          <str name="hl.formatter">htmla</str>
      </lst>
   </requestHandler>
 
 
	<searchComponent class="solr.HighlightComponent" name="highlight">
	   <highlighting>  		
	    <formatter name="htmla" default="true" class="solr.highlight.HtmlFormatter">
	        <lst name="defaults">
	          <str name="hl.simple.pre"><![CDATA[<b>]]></str>
	          <str name="hl.simple.post"><![CDATA[</b>]]></str>
	        </lst>
	      </formatter>
	      <encoder name="html" class="solr.highlight.HtmlEncoder" />  		
		  	<boundaryScanner name="default" default="false" class="solr.highlight.SimpleBoundaryScanner">
	  	      <lst name="defaults">
	                 <str name="hl.bs.maxScan">10</str>
	          	  <str name="hl.bs.chars">.,!? </str>
	              </lst>
		  	</boundaryScanner>
		  	<boundaryScanner name="breakIterator" default="true" class="solr.highlight.BreakIteratorBoundaryScanner">
		  		<lst name="defaults">
		  	      <str name="hl.bs.type">SENTENCE</str>
		  		</lst>
		  	</boundaryScanner>
	  	</highlighting>
	</searchComponent>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章