solr的suggest建议者

做一个搜索自动建议功能

据说是比/select查询效率要高,根据solr8.8官方文档说明表示,此功能可以通过 Spell Checking拼写检查实现,也可以用专门的SuggestComponent实现,我用的是前者。

因为要用到spellcheck这个组件,在solrconfig.xml文件里配置

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
    		<str name="queryAnalyzerFieldType">text_ik</str>
    	<lst name="spellchecker">
			<str name="name">default</str>
      		<str name="field">SUGGEST</str>
        	<str name="classname">solr.DirectSolrSpellChecker</str>
        	<str name="distanceMeasure">internal</str>
        	<float name="accuracy">0.5</float>
        	<int name="maxEdits">2</int>
        	<int name="minPrefix">1</int>
        	<int name="maxInspections">5</int>
        	<int name="minQueryLength">4</int>
        	<float name="maxQueryFrequency">0.01</float>
        	<float name="thresholdTokenFrequency">.01</float>
        </lst>
    </searchComponent>

   
    <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <str name="spellcheck.dictionary">default</str>
      <str name="spellcheck">on</str>
      <str name="spellcheck.extendedResults">true</str>
      <str name="spellcheck.count">10</str>
      <str name="spellcheck.alternativeTermCount">5</str>
      <str name="spellcheck.maxResultsForSuggest">5</str>
      <str name="spellcheck.collate">true</str>
      <str name="spellcheck.collateExtendedResults">true</str>
      <str name="spellcheck.maxCollationTries">10</str>
      <str name="spellcheck.maxCollations">5</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
    </requestHandler>

因为spellchek最终是被suggest引用的一个插件,所以这里默认配置也行,我只把filed换成了我要使用的索引字段。

接下来就是添加suggest组件,同样是在solrconfig.xml文件中

<searchComponent name="suggest" class="solr.SpellCheckComponent">
      <lst name="spellchecker">
          <str name="name">suggest</str>
          <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
          <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
          <str name="field">SUGGEST</str>
     </lst>
  </searchComponent>

   <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
       <lst name="defaults">
          <str name="spellcheck">true</str>
          <str name="spellcheck.dictionary">suggest</str>
          <str name="spellcheck.count">10</str>
     </lst>
     <arr name="components">
          <str>suggest</str>
     </arr>
</requestHandler>

name字段默认suggest相当于给此组件起个名字,
lookupImpl字段是查找方式,solr提供了不同的查找方式,TSTLookup是一个简单的紧凑的基于三元树的查找方式。
*field 很关键,如果没有配置自定义字典的话,这个字段就相当于字典字段,filed对应的字段必须在索引库里有值,此功能才能够实现。

详细字段解释在官方文档https://solr.apache.org/guide/8_8/suggester.html

然后配置schema

//拼写提示
<fieldType class="solr.TextField" name="textSpell" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
	</fieldType>
//短语提示,我用到的是短语提示,注意短语提示需要两个字以上suggest才会去找到。
	<fieldType class="solr.TextField" name="textSpell2">
     <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
     </analyzer>
	 <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
                   <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
	</fieldType>
//想要多个字段都能被suggest检索到,就复制到一个filed里
//source是来源,dest是最终字段,这些字段最后会被拼接到一起。
	<field name="SUGGEST" type="textSpell"  indexed="true" stored="true"  multiValued="true"/>
	<copyField source="DOCTITLE" dest="SUGGEST" maxChars="300" />
	<copyField source="DOCCONTENT" dest="SUGGEST" maxChars="300" />
	<copyField source="DOCKEYWORDS" dest="SUGGEST" maxChars="300" />
	

1.配置完成需要重新dataimport,如果查不到数据的话,在清空数据之前把conf下的dataimport.properties删了才清空数据。
2.导入数据完成后执行http://localhost:8983/solr/core/suggest?spellcheck.build=true&spellcheck=on
在这里插入图片描述

3.然后就可以用了,执行http://localhost:8983/solr/irp-core/suggest?q=信息
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值