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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章