全文检索搜索引擎都会有这样一个功能:输入一个字符便自动提示出可选的短语:
配置 managed-schema文件
1、配置自己core文件夹conf下的managed-schema文件
这个是自己的字段:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="username" type="text_ik" indexed="true" stored="true"/>
2、新建一个suggest_username字段,并将username的值拷贝到suggest_username字段:
<field name="suggest_username" type="text_suggest" indexed="true" stored="true"/>
<copyField source="username" dest="suggest_username"/>
copyField的source表示源,dest表示目标。
3、新建一个fieldType专门用于搜索建议:
<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
</analyzer>
</fieldType>
4、 配置solrconfig.xml文件
solrconfig.xml文件也在新建核心core的conf文件夹下
找到 searchComponent 替换掉
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">xxxSuggester</str>
<str name="lookupImpl">AnalyzingLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">suggest_username</str>
<str name="weightField">suggest_username</str>
<str name="payloadField">id</str>
<str name="suggestAnalyzerFieldType">text_suggest</str>
<str name="buildOnStartup">false</str>
</lst>
</searchComponent>
在searchComponent中的suggester需要配置一些参数解释。
name ;suggest名字
lookupImpl;查找不同算法实现,根据需要选择。
dictionaryImpl;dictionaryImpl。
field;建议的字段,如果是对多个字段做建议,就把多个字段拷贝到一个字段里面。即在定义filed的时候,定义为允许多值。
weightField;表示权重。
payloadField ;用于返回某一个值。
suggestAnalyzerFieldType;field字段的类型。
buildOnStartup;启动的时候构建建议索引。
找到 requestHandler 替换掉 (一般都在searchComponent下面)
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" >
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">10</str>
</lst>
<arr name="components">
<!-- 上面配置的searchComponent名字suggest -->
<str>suggest</str>
</arr>
</requestHandler>
这里 suggest就是上面配置的searchComponent名字suggest。
测试
部分参数说明
suggest.build=true ;表示构建suggest的索引,全部构建会耗时。可优化。
suggest.dictionary=AnalyzingSuggester ;指明使用上面加入的suggester字典组件名字
suggest.q=a ;suggest查询内容
http://127.0.0.1:8983/solr/testCore/suggest?suggest.build=true&suggest.dictionary=xxxSuggester&suggest.q=张
效果如图所示
tip:也可在管理界面查看,但是需要改一丢丢配置即可
在solrconfig.xml文件中去掉或注释如图所示一行
效果图如下
以上每个修改一次配置文件都需要重启solr。