我目前正在将Apache Solr搜索集成到我的平台中,并使用Suggester功能进行自动完成。但是,建议模块也不会返回拼写建议,例如,如果我搜索:
shi
建议模块返回以下内容:
shirt
shirts
但是,如果我搜索:
shrt
不会返回任何建议。我想知道的是:
a)建议模块的配置是否错误导致了这种情况? b)建议者模块是否以不返回拼写建议的方式构建? c)如何让Suggester模块返回拼写建议,而无需再提出拼写纠正建议请求?
我已经阅读了Solr文档,但似乎无法取得进展。
答案 0 :(得分:8)
您需要配置拼写检查组件以生成http://wiki.apache.org/solr/SpellCheckComponent
该任务包括以下步骤; - 更新用于拼写建议的schema.xml,就像您可能希望将字段复制到新字段中,例如“拼写”。
<copyField source="id" dest="spelling" />
<copyField source="name" dest="spelling" />
<copyField source="description" dest="spelling" />
<copyField source="longdescription" dest="spelling" />
<copyField source="category" dest="spelling" />
<copyField source="source" dest="spelling" />
<copyField source="merchant" dest="spelling" />
<copyField source="contact" dest="spelling" />
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">defaultSearchField</str>
<!-- spell check component configuration -->
<str name="spellcheck">true</str>
<str name="spellcheck.count">5</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.maxCollationTries">5</str>
</lst>
<!-- add spell check processing after the default search component as configured above completed it's task -->
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<!-- decide between dictionary based vs index based spelling suggestion, in most cases it makes sense to use index based spell checker as it only generates terms which are actually present in your search corpus -->
<str name="classname">solr.IndexBasedSpellChecker</str>
<!-- field to use -->
<str name="field">spelling</str>
<!-- buildOnCommit|buildOnOptimize -->
<str name="buildOnCommit">true</str>
<!-- $solr.solr.home/data/spellchecker-->
<str name="spellcheckIndexDir">./spellchecker</str>
<str name="accuracy">0.7</str>
<float name="thresholdTokenFrequency">.0001</float>
</lst>
</searchComponent>
重新索引语料库
测试建议,例如
的http://:/ solr的/选择/ Q = coachin
response {
"responseHeader":{
"status":0,
"QTime":12,
"params":{
"indent":"true",
"q":"coachin"}},
"response":{"numFound":0,"start":0,"docs":[] },
"spellcheck":{
"suggestions":[
"coachin",{ "numFound":1, "startOffset":0, "endOffset":7, "suggestion":["cochin"]}]}}
希望有所帮助。