suggest 是搜索引擎一个方便的功能,对数据的关键字进行预测和建议,减小了用户的输入,大致的效果以下:
幸运的是 solr 也提供了相似的功能,在该功能的基础上,配合 jQuery 或 kissy 的自动完成组件就能够实现相似上面的功能。
启动该功能的过程大致以下:
suggest 的功能依赖拼写组件,solr_home/data 目录下会有一个 spellchecker 目录,该目录用于存放 suggest 和 拼写检查的索引库,因此要先配置 spell 功能,配置以下:html
1 2 3 4 5 6 7 8 9 |
<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> <str name="queryAnalyzerFieldType">textSpell</str> <lst name="spellchecker"> <str name="name">default</str> <str name="field">title</str> <str name="buildOnCommit">true</str> <str name="spellcheckIndexDir">spellchecker</str> </lst> </searchComponent> |
上述中的 field 用于指定主索引库中用于 spellchecker 索引的数据从主索引库的那个字段来获取。buildOnCommit 该属性为 true 时,当主索引库有提交指令时,将会自动把指定字段的内容送到 spellchecker 索引库,做为拼写检查和 suggest 使用。
接下来配置 suggest 的处理组件和请求类,以下所示:java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<searchComponent class="solr.SpellCheckComponent" name="suggest"> <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.TSTLookupFactory</str> <float name="threshold">0.005</float> <str name="buildOnCommit">true</str> </lst></searchComponent><requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest"> <lst name="defaults"> <str name="spellcheck">true</str> <str name="spellcheck.dictionary">suggest</str> <str name="spellcheck.onlyMorePopular">true</str> <str name="spellcheck.count">5</str> <str name="spellcheck.collate">true</str> </lst> <arr name="components"> <str>suggest</str> </arr></requestHandler> |
这时候从新提交数据,会发现原先为空的 spellchecker 为空的索引库中有数据了,而后打开相似这样的网址(请将q=的值换成 title 字段中有的值)apache
1 |
http://localhost:8983/solr/suggest/?q=%E7%94%9F |
本文固定连接: http://www.chepoo.com/solr-suggest-apply.html | IT技术精华网app