【问题标题】:Solr Spell CheckSolr 拼写检查
【发布时间】:2012-12-12 08:30:02
【问题描述】:

我正在使用 Solr Spell Check 。启动并运行。但是对于某些拼写错误,它没有给出预期的结果:

正确的词:癌症

拼写错误:Cacner ,cacnar , cancar ,cancre,cancere 。

我没有将“癌症”作为“cacnar”的建议,而是显示“inner”,尽管听起来更像 cacner 不是正确的建议。对于 cacnar,我再次收到“肺”的建议。

有什么方法可以将其配置为显示癌症而不是其他结果?

或者,在向用户展示之前可以参考的建议是否有任何分数?

根据要求,这里是配置: 用于字典的字段(在 schema.xml 中):

<copyField source="procname"  dest="dtextspell" />
 <field name = "dtextspell" stored="false" type="text_small" multiValued="true" indexed="true"/>

“text_small”的定义(同样在 schema.xml 中):

<fieldType name="text_small" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
      <analyzer type="index">
              <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StandardFilterFactory"/>
      </analyzer>
     <analyzer type ="query">
              <tokenizer class="solr.StandardTokenizerFactory"/>    

     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.StandardFilterFactory"/>
     </analyzer>
</fieldType>

在 solrconfig.xml 中:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">

<str name="queryAnalyzerFieldType">text_small</str>
<lst name="spellchecker">
  <str name="name">default</str>
   <str name="classname">solr.IndexBasedSpellChecker</str>
    <str name="field">dtextspell</str>
    <float name="thresholdTokenFrequency">.0001</float>

  <str name="spellcheckIndexDir">./spellchecker</str>
   <str name="field">name</str>
    <str name="buildOnCommit">true</str>

</lst></searchComponent>

像这样将它附加到选择请求处理程序:

<requestHandler name="/select" class="solr.SearchHandler">

 <lst name="defaults">
   <str name="echoParams">explicit</str>

   <int name="rows">10</int>
   <str name="spellcheck.count">10</str>
   <str name="df">text</str>
 </lst>
 <arr name="last-components">
   <str>spellcheck</str>
 </arr>   </requestHandler>

构建拼写检查:

http://localhost:8080/solr/select?q=*:*&spellcheck=true&spellcheck.build=true

搜索词:

http://localhost:8080/solr/select?q=procname:%22cacner%22&spellcheck=true&defType=edismax

响应 XML:

<lst name="spellcheck"><lst name="suggestions">
     <lst name="cacner">
     <int name="numFound">1</int>
     <int name="startOffset">10</int>
     <int name="endOffset">16</int>
      <arr name="suggestion">
     <str>inner</str> <end tags start from here>

希望对你有帮助!!

【问题讨论】:

  • 您是配置了拼写检查器还是使用了默认的?如果你有的话,我可以看看你的一些代码,或者至少是你用来查询 solr 的 url 吗? :)
  • 嘿,按您的要求添加代码。
  • @SamueleMattiuzzo 我也有类似的问题,但在我的情况下有点不同拼写更正和建议工作正常......请看看这个......stackoverflow.com/questions/22196793/…

标签: solr spell-checking


【解决方案1】:

听起来您最近没有重建拼写检查器的索引。通过在查询字符串中附加spellcheck=true&amp;spellcheck.build=true 进行查询来请求手动更新(不要对每个请求都执行此操作,因为构建过程可能需要一些时间)。您还应该确保使用正确的字段来构建拼写检查器的索引。

您还可以将拼写检查器组件配置为rebuild the index on every commiton every optimize,方法是添加:

<str name="buildOnCommit">true</str>

<str name="buildOnOptimize">true</str>

到您的拼写检查器配置。

【讨论】:

  • 嘿,我目前正在处理它,所以拼写检查已经建立了很多次。该字段也是正确的,因为我得到了其他示例术语的正确拼写。我将很快编辑我的答案以包含我的评论,你可以看看并告诉我是否有问题。
  • 我也有类似的问题,但在我的情况下有点不同拼写更正和建议工作正常......请看看这个......stackoverflow.com/questions/22196793/…
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
相关资源
最近更新 更多