`
liuyuntao987
  • 浏览: 11423 次
社区版块
存档分类
最新评论
阅读更多

在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"/>

 

如果上面两种都有设置,以第一种优先生效,第二种就被忽略掉了,因此可以根据需要来选择使用



 

 

加上后缀后,只有第一种配置生效:



 

 

  • 大小: 69.4 KB
  • 大小: 101.8 KB
  • 大小: 32.7 KB
  • 大小: 66.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics