陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

定义

同义词:搜索结果里出现的同义词。如我们输入”还行”,得到的结果包括同义词”还可以”。

停止词:在搜索时不用出现在结果里的词。比如is 、a 、are 、”的”,“得”,“我” 等,这些词会在句子中多次出现却无意义,所以在分词的时候需要把这些词过滤掉。

扩展词:在搜索结果里额外出现的词。扩展词只能是你输入词的本身或子串。比如我们 输入”重庆开县人”,正常分词得到的结果是“重庆” “开县”“人”;当我们在扩展词里加入“重庆开县”时,分词的结果是“重庆开县”“重庆” “开县”“人”。

配置同义词

1.在solr_home的conf目录下的schema.xml 中配置同义词text_syn:

<!-- 配置IK分词器的同义词 -->
 <fieldType name="text_syn" class="solr.TextField">
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" />
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

2.假定在solr_home的conf目录下的schema.xml 中要对shortName字段进行同义词配置,则我们需要将type属性设为上向配置的”text_syn”

<field name="shortName" type="text_syn" indexed="true" stored="true" />
  • 1

3.在conf目录下的 synonyms.txt 中增加同义词,如:

这里写图片描述
这里我多说两句:上面红框里的 => 右侧的词是左侧词的同义词,多个时用空格隔开。还有就是,最好不要直接打开synonyms.txt这个文件,因为加入的汉字在保存后会查不出来,因为txt不是UTF-8的格式保存的。

4.测试同义词

输入高兴:
  • 1

这里写图片描述

输入中华:
  • 1

这里写图片描述

5.基于上面的问题,说下怎么解决,毕竟不论我们输入中华还是中国,都能有对应的同义词结果。

首先,我们将synonyms.txt里的同义词用英文逗号隔开,然后将上面配置IK同义词里的expand属性设为true

这里写图片描述

我们输入:大大的,结果如下:

这里写图片描述

配置停止词和扩展词库。

1.将IKAnalyzer解压文件夹下的stopword.dic和IKAnalyzer.cfg.xml复制到tomcat/webapps/solr/WEB-INF/classes下,再新建一个ext.dic,里面的格式和stopword.dic一致。

2.修改IKAnalyzer.cfg.xml如下面的格式可以配置多个停止词或者扩展词库文件。

<properties> 
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典-->
    <entry key="ext_dict">ext.dic;</entry>

    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">english_stopword.dic;stopword.dic</entry>
<properties> 

输入“重庆开县”时,正常分词是只有”重庆” “开县”的
在ext.dic里添加了”重庆开县”后,测试结果:
这里写图片描述

输入“重庆开县”时,正常分词是只有”重庆” “开县”的
在stopword.dic里添加了“开县”之后,测试结果:
这里写图片描述

注意

字段如果要能被分词,或是停止词,或是扩展词,需要在schema.xml里配置该字段时,给该字段的type属性配成分词类型,我们这里是text_ik,例:

<field name="companyName" type="text_ik" indexed="false" stored="true" multiValued="false" />
0 个人打赏
posted on   宏宇  阅读(994)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2017-10-13 SQL Server数据库大型应用解决方案总结
2017-10-13 集群(cluster)原理(转)
2008-10-13 .NET中的动态编译(转)
2008-10-13 简单的重写重置SessionID
2008-10-13 一段和别人的对话,没事写出来(杂项)
2008-10-13 关于Request.Form和动态添加服务器控件
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示