2016-04-14 50 views
0

假设一个用户执行搜索类似:Solr的拼写检查多字查询一些正确的话

red 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 

因为“红色”的拼写是否正确,我得到的结果与“红色文件“但我对拼写错误的术语没有得到任何拼写建议,”计算机专家“。如果我改变了,“红色”改为像“reeed”这样的不正确的东西,我会为“reed”和“computor”提供拼写建议,但如果一个词似乎拼写正确,那么我根本就没有任何建议。

如何重新配置​​我的查询或拼写检查器对查询中的每个传入术语运行拼写检查器?

+0

您是否找到解决方案? –

+0

我还没有找到使用solr的解决方案。 – zelinka

回答

0

我面对同样的问题,但已经找到了使用solr的解决方案。

如果您使用的是旧版本,请先将solr版本升级到最新的Solr-6.1.0。

如果您使用的是IndexBasedSpellChecker,那么您应该在文档中使用文字计算机。在字段类型中通过index =“true”。

对于正确拼写检查的变化,

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> 

希望这可以帮助您。

0

您需要增加参数spellcheck.maxResultsForSuggest的值,如果有“足够”的搜索结果,将会阻止建议。尝试例如添加到您的配置:

<int name="maxResultsForSuggest">500</int>