suggest 是搜索引擎一个方便的功能,对数据的关键字进行预测和建议,减少了用户的输入,大体的效果如下:



幸运的是 solr 也提供了类似的功能,在该功能的基础上,配合 jQuery 或 kissy 的自动完成组件就可以实现类似上面的功能。



启动该功能的过程大体如下:



suggest 的功能依赖拼写组件,solr_home/data 目录下会有一个 spellchecker 目录,该目录用于存放 suggest 和 拼写检查的索引库,所以要先配置 spell 功能,配置如下:

<          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 的处理组件和请求类,如下所示:

<          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 字段中有的值)



host:8983/solr/suggest/?q=%E7%94%9F



会得到如下结果: