suggest 是搜索引擎一个方便的功能,对数据的关键字进行预测和建议,减少了用户的输入,大体的效果如下:
启动该功能的过程大体如下:
suggest 的功能依赖拼写组件,solr_home/data 目录下会有一个 spellchecker 目录,该目录用于存放 suggest 和 拼写检查的索引库,所以要先配置 spell 功能,配置如下:
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 的处理组件和请求类,如下所示:
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 字段中有的值)
http://local
host:8983/so lr/suggest/? q=%E7%94%9F
会得到如下结果:
标签:
suggest