Solr-suggust模块(联想搜索)

 

一 需求

     本文运行环境:Solr6 + 内置服务器Jetty   

      在企业中建议使用Tomcat作为服务器来运行Solr,注意:整合这里不作强调,不过有个小点要注意,如果在solr页面查不到数据可能是因为Tomcat无法解析 / 的原因,需要在Tomcat的conf/catalina.properties 最后一行加上org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true。

 

二 Solr配置

1 添加联想类型        

 

      ItemTitle为需要联想字段,配置如下(managed-schema文件):

	<field name="ItemTitle" type="text_general" indexed="true" stored="true"/>
	<field name="CountryCode" type="text_general" indexed="true" stored="true"/>
	<field name="Weight" type="string" indexed="false" stored="true"/>
	<field name="DESC" type="string" indexed="false" stored="true"/>
	
	<!-- 采用suggust模块实现联想搜索 -->
	<field name="suggestion" type="text_suggest" indexed="true" stored="true" multiValued="true"/>
	<copyField source="ItemTitle" dest="suggestion"/>

      suggestion字段即为suggest联想所取的字段。这里将suggestion字段设为text_suggest类型,text_suggest是一个自定义的类型,具体作用和配置详见后文。然后利用copyField将ItemTitle字段拷贝到suggestion字段。

2 配置联想字段    

 

     接下来就需要建立一个专门的字段类型来配合suggest模块进行检察建议了。这里该字段名称为text_suggest,配置如下(managed-schema文件):

	<!-- text_suggest 类型定义-->
	<fieldType name="text_suggest" class="solr.TextField">  
		<analyzer type="index">  
		<tokenizer class="solr.KeywordTokenizerFactory"/>  
		<filter class="solr.LowerCaseFilterFactory"/>  
		</analyzer>  
		<analyzer type="query">  
		<tokenizer class="solr.KeywordTokenizerFactory"/>  
		<filter class="solr.LowerCaseFilterFactory"/>  
		</analyzer>  
	</fieldType> 

  在这里我们要对整个字段进行联想,因此采用KeywordTokenizerFactory作为分词器,并且使用LowerCaseFilterFactory来保证其可以不区分大小写。可以根据需要替换成自己需要的analyzer。

3 suggest模块配置

  记录表结构已经建好,接下来就是suggest模块的配置,配置如下(solrconfig.xml文件):

 

	<!-- suggest模块配置 -->
	<searchComponent name="suggest" class="solr.SuggestComponent">  
        <lst name="suggester">  
            <str name="name">suggest</str>  
            <str name="lookupImpl">AnalyzingLookupFactory</str> 
            <str name="dictionaryImpl">DocumentDictionaryFactory</str> 
			<!--用于储存在页面的字段 -->
			<str name="payloadField">DESC</str>
			<str name="field">ItemTitle</str> 			
            <str name="suggestAnalyzerFieldType">text_suggest</str>
			<!--数据结构建立,建立手动开启  http://localhost:8983/solr/merge/suggest?suggest=true&suggest.dictionary=suggest&wt=json&suggest.q=Ath&suggest.build=true  -->
            <str name="buildOnStartup">true</str>
            <str name="buildOnCommit">true</str>  <!-- 这两个参数看下文 -->
            <str name="buildOnOptimize">true</str>   
        </lst>  
    </searchComponent> 

  

  在本配置中,name为该suggest模块的名字;lookUpImpl为查找器,默认为JaspellLookupFactory;dictionaryImpl为字典实现;field为要联想的字段;suggestAnalyzerFieldType规定了进行联想操作所使用类型所对应的Analyzer(该字段必填);buildOnStartup表示是否在启动时建立索引,建议设置为false。

ps:参数的补充::

 

 

4 requestHandler配置

 

  接下来配置suggest模块的requestHandler。配置如下(managed-schema文件):

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

  Suggest参数必须配置为true;suggest.dictionary为suggest操作所需要用到的字典,应当与上面suggest模块配置中的name属性保持一致;suggest.count为候选词数量,这里为10。

 

5 建立索引

  这里我们就已经把suggest模块配置完毕了。如果suggest模块配置中buildOnStartup设置为false,则需要手动建立一次索引。建立索引链接如下:

http://localhost:8983/solr/merge/suggest?suggest=true&suggest.dictionary=suggest&wt=json&suggest.q=Ath&suggest.build=true 

 

 

三 效果预览

 

 

 

详细请参见相关文档Solr的suggest组件使用大全:

https://www.w3cschool.cn/solr_doc/solr_doc-7yp92gzc.html

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值