Solr拼写检查多字查询,带有一些正确的单词

时间:2016-04-14 15:35:17

标签: solr spell-checking

假设用户搜索了类似的内容:

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;,但如果一个术语看起来拼写正确,那么我根本就没有任何建议。

如何重新配置​​我的查询或拼写检查程序,以便在查询中的每个传入字词上运行拼写检查程序?

2 个答案:

答案 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>