solr配置同义词专有词的注意点
Posted 巨头之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
以上是关于solr配置同义词专有词的注意点的主要内容,如果未能解决你的问题,请参考以下文章