有时候,为了实现如下功能
以满足用户在输入个别单词的时候,能够自动联想提示,这样可以避免用户的冗余输入并提供一定的推荐,从而实现更好的交互效果和内容推广效果。这样的功能有很多实现方式,成熟的Solr其实就已经封装了这样的功能,而且只需要简单的配置就可以完成。(注,本人使用的是Solr-4.10.0版本)
1. 配置suggest功能点
打开solr-config.xml,查找到spellcheck节点
如上提供配置spellchecker配置,可以用于修改最大只能提示词汇量
定位solr.SuggestComponent,主要如下说明,修改sourceLocation参数,根据这个参数的配置,我们可以知道,solr拉取只能提示的文件在以当前路径下的suggest文件夹中的dict.txt文件中。
配置完后,根据mySuggester的说明,可以知道请求路径是/suggest
2. 添加只能联想词汇表
如上述说明,需要在solr-config.xml同级目录创建suggest文件夹,并在其下面创建dict.txt文件,如下所示
其中,dict.txt文件格式如下
#可以使用#做注释 #格式:词[\t权重值] aquire aquire2 aquire3
#中文 让我们荡起双桨 贝瓦儿歌
#香格里拉 香格里拉 1.2 香格里拉县 1.5 香格里拉酒店 3 |
3. 测试
请求地址http://localhost:8080/project-name/core-name/suggest?q=香
返回结果如下
返回由“香”开头的所有词汇,包括其权重和payload两个值,可以发现,由于weight是long类型,所以分数对排序并没有起作用。
Solr Suggest组件是支持实时新增词汇的,实现这个机制,只需要在请求中加一个参数,如下测试
我们先新增词汇如下:
#新增词汇 美女 美人 美人胚子 |
请求地址http://localhost:8080/project-name/core-name/suggest?q=香
没有任何结果,这是为什么?文件变更,没有钩子触发,只能显示触发文件的重新加载。
只需要修改请求地址
http://localhost:8080/project-name/core-name/suggest?suggest.build=true&q=香
返回结果如下:
这个demo我没有对suggest请求和返回做封装,对于不同的展示需求,和分词需求,可以对suggest组件再做一层封装。具体可以参考 http://lavafree.iteye.com/blog/1687415