我看到很多教程向您展示如何使用solr实现'你的意思'功能,搜索'ance'可能会返回'你的意思是粉刺吗?'
我们可以让solr自动更正并立即搜索,而不是简单地建议正确的拼写吗?有点像谷歌有时会返回'显示痤疮的结果而不是Ance'
如何实施?是否可以在一个请求中完成?
编辑:我目前在solrconfig.xml中的尝试
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.maxCollationTries">5</str>
<str name="spellcheck.maxCollations">3</str>
<str name="spellcheck">on</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
上面显示了/ select的请求处理程序,我尝试过做Arun在下面建议的内容。然而,这并没有得到我追求的结果。当我输入像'clrfying'这样的拼写错误时,我得到:
{
"responseHeader": {
"status": 0,
"QTime": 49,
"params": {
"indent": "true",
"q": "text:clrifying",
"_": "1385375095827",
"wt": "json"
}
},
"response": {
"numFound": 0,
"start": 0,
"docs": []
},
"spellcheck": {
"suggestions": [
"clrifying",
{
"numFound": 1,
"startOffset": 5,
"endOffset": 14,
"suggestion": [
"clarifyin"
]
},
"collation",
[
"collationQuery",
"text:clarifyin",
"hits",
8,
"misspellingsAndCorrections",
[
"clrifying",
"clarifyin"
]
]
]
}
}
正如您所看到的,它正在返回拼写更正。但我想要的是solr还根据这些建议提供搜索结果。
答案 0 :(得分:1)
是的,它被称为“整理”查询 您需要设置请求处理程序以进行以下设置:
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.maxCollationTries">5</str>
<str name="spellcheck.maxCollations">3</str>
与
一起<str name="spellcheck">on</str>
您可以在此处阅读:http://wiki.apache.org/solr/SpellCheckComponent
修改强>
您需要在幕后执行collationQuery,然后根据您所获得的内容向用户显示一条信息性消息,指出“搜索粉刺而不是 ance ”对于你的校对词“命中”。排序“使”能够执行此操作,以便在使用建议的查询替换用户查询之前运行某些逻辑,并在“幕后”重新执行它。你不想让solr一直运行建议查询......即使用户是对的......你需要看看用户查询得到的结果数量非常少,说2次点击并且整理的数量非常多结果说200表示用户查询有问题,你需要在“幕后”进行判断调用并重新运行整理查询,并将大多数结果作为替换。阅读上面的文档链接。