假设用户搜索了类似的内容:
red computor
"红色"拼写正确,但" computor"不是。我有拼写检查器的以下配置:
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">spelling</str>
<str name="classname">solr.IndexBasedSpellChecker</str>
<str name="accuracy">0.5</str>
<int name="maxEdits">2</int>
<int name="minPrefix">1</int>
<int name="maxInspections">5</int>
<int name="minQueryLength">3</int>
</lst>
我发出的查询如下:
http://localhost:8983/solr/collection1/spell?q=computor+red&wt=json&indent=true&spellcheck=true&spellcheck.collate=true
因为&#34;红色&#34;拼写正确,我得到与&#34; red&#34;相关的文件的结果。但是对于拼错的术语,我没有得到任何拼写建议,&#34; computor&#34;。如果我改变了,&#34; red&#34;对于不正确的事情,例如&#34; reeed&#34;我得到了#34; reeed&#34;的拼写建议。和&#34; computor&#34;,但如果一个术语看起来拼写正确,那么我根本就没有任何建议。
如何重新配置我的查询或拼写检查程序,以便在查询中的每个传入字词上运行拼写检查程序?
答案 0 :(得分:0)
我遇到了这样的问题但是找到了使用solr的解决方案。
如果您使用的是旧版本,请首先将solr版本升级到最新的Solr-6.1.0。
如果您使用的是IndexBasedSpellChecker,那么您的文档中应该包含 computer 字样。 by index =&#34; true&#34;在字段类型。
对于正确的拼写检查更改,
accuracy => 0.001
minCount => 1
maxCollationTries => 1
maxCollations => 1
并删除此项,如果现在不需要
<int name="maxEdits">2</int>
<int name="minPrefix">1</int>
<int name="maxInspections">5</int>
在indexBasedSpellcheckerComponent,
下添加此代码<!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">spelling</str>
<str name="combineWords">true</str>
<str name="breakWords">true</str>
<int name="maxChanges">10</int>
</lst>
<!-- Example of using different distance measure -->
<lst name="spellchecker">
<str name="name">spelling</str>
<str name="field">lowerfilt</str>
<!-- Use a different Distance Measure -->
<str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
<str name="spellcheckIndexDir">./spellchecker</str>
</lst>
希望这可以帮到你。
答案 1 :(得分:0)
您需要增加参数spellcheck.maxResultsForSuggest
的值,如果搜索结果“足够”,则会阻止建议。尝试添加配置:
<int name="maxResultsForSuggest">500</int>