solr6.6.2之拼音联想

1.软件版本介绍

SOLR版本:6.6.2

Luccence:6.6.2

jdk版本:1.8.0.x系列

Zookeeper:3.4.6

Tomcat:8.5.x系列

2. 下载的插件

a44bf49d9f2304ec55689bff320f2ed1176.jpg

链接:https://pan.baidu.com/s/1kt9QTTAmQjdPdrojlodGdQ 密码:b29y

3.配置managed-schema字段类型及参数详解

<!--元数字字段-->
<field name="questionpinyin" type="text_smartcn" indexed="true" stored="true" multiValued="false" />
<!--字段类型-->
<fieldType name="text_smartcn" class="solr.TextField" positionIncrementGap="0">
    <analyzer type="index">
      <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      <filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
      <filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
      <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
             maxPosAsterisk="2" maxPosQuestion="1" minTrailing="2" maxFractionAsterisk="0"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      <filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
      <filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
    </analyzer>
  </fieldType>

withOriginal:如果为true,那么在相同的位置产生原始的和反向的词元,如果为false,则只产生反向词元

maxPosAsterisk:指的是“*”最大在第几位会被翻转,默认是2,比如当前值等于2的时候,搜索*明星和 女*明星  都会被翻转,建议默认值就行。

maxPosQuestion:指的是?号最大在第几位查询此会被翻转,默认为1。设置为0,1和maxposasterisk扭转单纯的后缀查询

minTrailing:触发反转的附加参数,如果星号(“*”)的位置是低于这个分数查询标记长度。默认值为0.0f(禁用)

maxFractionAsterisk:最低数量的字符通配符查询令牌过去后。为了好的性能,这应该设置为大于1的值。默认为2

minTermLenght:最小中文词长度,意思是小于这个值的中文词不会做拼音转换。

minGram:最小拼音切分长度。

参考api:http://lucene.apache.org/solr/7_3_1/solr-core/org/apache/solr/analysis/ReversedWildcardFilterFactory.html

4. solr之admin演示分析效果,参考如下图:

024eb0bd224dfe1fb6260d49587bc885c49.jpg

5.核心代码分析

 

ModifiableSolrParams params = new ModifiableSolrParams() ;
//验证是否包含有拼音
if(StringUtils.isNotBlank(engKey) && StringUtils.isNotBlank(pinYinWords)){
    String qTemp = "questionPinyin:*%s*";
     qTemp = String.format(qTemp, words);
     params.set("q", qTemp);
     buffer.append(" AND ").append(QuestionTitle.QUESTION_TYPE.getText()+":SpecialtyAndStandard");
	 buffer.append(" AND ").append(QuestionTitle.ROBOTANSWERSTATUS.getText()+":1");
	 buffer.append(" AND ").append(QuestionTitle.AUDIT_STATUS.getText()+":1");
	 params.set("fq",buffer.toString());
     //此处省略
     QueryResponse rsp = cloudSolrServer.query(params);
     ///.............................
}

251dfd565110203e37edeac69bbc33d1544.jpg

时间问题,此文章只是简单的描述实现思路,仅供参考,不足之处还望见谅~

待后续有时间再补充细节~ 

转载于:https://my.oschina.net/zupengliu/blog/1828431

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值