一、期望达到的效果
短文本模糊搜索,支持拼音搜索、数字的前后缀搜索、单字或者单字母搜索。最多支持20个字符长度,更多介绍及注意事项参见模糊搜索使用说明
如文档字段内容为“菊花茶”,则搜索“菊花茶”、“菊花”、“茶”、“花茶”、“菊”、“花”、“菊茶”、“ju”、“juhua”、“juhuacha”、“j”、“jh”、“jhc”等情况下可以召回。
如文档字段内容为手机号“13812345678”,则通过“^138”来搜索以“138”开头的手机号,通过“5678$”搜索以“5678”结尾的手机号;
如文档字段内容为“OpenSearch”,则通过单个字母或者组合都可以检索到。
二、步骤
1.先下载两个jar包 ,并将jar包上传到solrlib文件夹底下
pinyin4j-2.5.0.jar pinyinAnalyzer4.3.1.jar
2.在solr的schema文件底下配置如下
<fieldType name="short_text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
maxPosAsterisk="3" maxPosQuestion="1" maxFractionAsterisk="0.33"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="1" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
参数详解:
withOriginal:如果为true,那么在相同的位置产生原始的和反向的词元,如果为false,则只产生反向词元
maxPosAsterisk:指的是“*”最大在第几位会被翻转,默认是2,比如当前值等于2的时候,搜索*明星和 女*明星 都会被翻转,建议默认值就行。
maxPosQuestion:指的是?号最大在第几位查询此会被翻转,默认为1。设置为0,1和maxposasterisk扭转单纯的后缀查询
minTrailing:触发反转的附加参数,如果星号(“*”)的位置是低于这个分数查询标记长度。默认值为0.0f(禁用)
maxFractionAsterisk:最低数量的尾随字符通配符查询令牌过去后。为了好的性能,这应该设置为大于1的值。默认为2