在solr的分词配置后成功后,在solr后台管理界面进行模糊查询的时候会存在分词匹配个数的问题。打个简单的比方:搜索兰州XXXX酒店。 往往这个时候就有一大批数据出来,只要包含了分词后的词的数据都会搜索出来,给客户的体验不怎么好,本来客户是想只展示兰州的XXXX酒店的,结果北京的、广州的,还有其他名称的酒店都给搜索出来。这个时候就是分词的匹配个数设置的问题了。
首先还是看下分词的配置(IK Analyzer的导入这里不作讲解了,网上很多例子);
在schema.xml增加如下配置:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<dynamicField name="*_sa" type="text_ik" indexed="true" stored="true" />
这里自定了一个类型,在solr中凡是以"_sa"结尾的都将作模糊查询(可以自己定义结尾的类型);
看看分词的结果:
如搜索:hotelname_sa:兰州锦江阳光酒店
理论上客户想要的是包含了这条语句的所有分词的数据,但是solr默认是or的关系,即包含了兰州、锦江、阳光、酒店中任意的词都会搜索出来,显然不是我们所要的。
解决办法有两种(根据各自的需求自己选择):
1、若可以随意选择匹配程度,不需要100%的匹配,可以在查询语句中增加参数:defType=edismax&mm=60%25 (mm是最小匹配的数量,可以是个固定的值,也可也是个百分比)
如:http://192.168.1.211:8787/solr/hotel_info/select?q=hotelname_sa%3A阳光兰州锦江酒店&fl=hotelname_sa&wt=json&indent=true&defType=edismax&mm=60%25
2、在solr 的schema.xml中把 solrQueryParser 的defaultOperator 变成AND (默认这个参数是被注释掉的,找到后改一下就可以了)
<solrQueryParser defaultOperator="AND"/>
如果上面两种都有设置,以第一种优先生效,第二种就被忽略掉了,因此可以根据需要来选择使用
加上后缀后,只有第一种配置生效:
相关推荐
支持solr5.5 solr6.0中IK分词需要的资料
solr导入Ik分词专用。
solr中文分词器
Solr5.4的中文分词库,解压拷贝到Solr5.4.0的WEB-INF目录下即可,如非默认数据保存路径,要修改web.xml文件
包含内容:IKAnalyzer中文分词器V2012使用手册.pdf;机械词汇大全【官方推荐】;深蓝词库转换.exe;中文分词词库打包50万词汇;IKAnalyzer-5.0.jar
solr7.3.1种需要的中文IK分词器,其中包括IK分词的jar和配置文件还有mmseg4j
solr 源码 + IK 分词器 + zookeeper。
NULL 博文链接:https://jsxzzliang.iteye.com/blog/852460
solr安装ik分词器将jar复制到solr\WEB-INF\lib 中 具体使用:https://mp.csdn.net/postedit
solr 中文分词
solr 中文查询分词器,把一串字符分作多个词语进行查询
solr5 中文分词
Solr的ik分词以及mysql-connector-java-8.0.11,没积分call我,我发给你
solr6.0的中文分词也支持solr5.x,IKAnalyzer.jar和配置文件
solr cloud6.x.x 都可以用,solr的拼音分词
绝对可以用哈,我工程都在用,所以放心的使用,积分也不高的就5分
solr6.0中IK分词需要的资料,用Ik只需要将相关的配置放入到solr中,即可
IK分词solr5.0.0
solr中文分词jar包ik-analyzer 含class配置 ik-analyzer-7.5.0