solr中英文分词模糊查询
在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"/>
如果上面两种都有设置,以第一种优先生效,第二种就被忽略掉了,因此可以根据需要来选择使用
加上后缀后,只有第一种配置生效:
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐