【问题标题】:Request handle solrconfig.xml Spellchecker请求句柄 solrconfig.xml 拼写检查器
【发布时间】:2011-04-27 09:30:23
【问题描述】:

根据solr documentation,我正在尝试设置拼写检查器。但是当我测试时,我没有任何建议。我的一段代码如下:

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

    <str name="queryAnalyzerFieldType">textSpell</str>

    <lst name="spellchecker">
      <str name="classname">solr.IndexBasedSpellChecker</str>
      <str name="name">default</str>
      <str name="field">name</str>
      <str name="spellcheckIndexDir">./spellchecker</str>
    </lst>
    <str name="queryAnalyzerFieldType">textSpell</str>

  </searchComponent>


 <requestHandler name="/spellcheck" class="solr.SearchHandler">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <!-- Optional, must match spell checker's name as defined above, defaults to "default" -->
      <str name="spellcheck.dictionary">default</str>
      <!-- omp = Only More Popular -->
      <str name="spellcheck.onlyMorePopular">false</str>
      <!-- exr = Extended Results -->
      <str name="spellcheck.extendedResults">false</str>
      <!--  The number of suggestions to return -->
      <str name="spellcheck.count">1</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>

我发送给 Solr 的查询:
q=%2B%28text%3A%28gasal%29%29&suggestField=contentOriginal&ontologySeed=gasal&spellcheck.build=true&spellcheck.q=gasal&spellcheck=true&spellcheck.collat​​e=true&hl=true&hl.sn-ps=5&hl.fl=text&hl.fl=text&rows=12&start =0&qt=%2Fsuggestprobabilistic

有人知道为什么吗?提前致谢

【问题讨论】:

  • 您的配置看起来正确。您能否发布您正在提交的查询以及预期结果(即您的字典中有什么内容)?
  • 我输入篮球,我想打篮球,例如
  • 请将您发布到 Solr 的整个查询和所有参数发布。您的索引中是否有一个文档在 textSpell 字段中有标记“篮球”?
  • 我用这个查询信息编辑了我的问题。谢谢

标签: solr spell-checking


【解决方案1】:

首先,不要在组件配置中重复queryAnalyzerFieldType两次。

建议不要使用/spellcheck 处理程序,而是将拼写检查组件绑定到标准查询处理程序(或 dismax,如果您使用的是),如下所示:

<requestHandler name="standard" class="solr.SearchHandler" default="true">
 <lst name="defaults">
    ...
 </lst>   
 <arr name="last-components">
    <str>spellcheck</str>
    ...         
 </arr>
</requestHandler>

然后你可以这样称呼它:
http://localhost:8983/solr/select?q=komputer&amp;spellcheck=true

在使用之前不要忘记to build the spellcheck dictionary
http://localhost:8983/solr/select/?q=*:*&amp;spellcheck=true&amp;spellcheck.build=true

您可以通过在组件中配置字典来强制字典在每次提交时构建:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
 <str name="queryAnalyzerFieldType">textSpell</str>
 <lst name="spellchecker">
  <str name="classname">solr.IndexBasedSpellChecker</str>
  <str name="name">default</str>
  <str name="field">name</str>
  <str name="spellcheckIndexDir">./spellchecker1</str>
  <str name="buildOnCommit">true</str>
 </lst>
</searchComponent>

最后,确保您的name 字段确实是textSpell 类型的索引字段,并且它包含足够的内容来构建一个好的字典。在我的例子中,我有一个名为 spellchecker 的字段,它是从我的索引的几个字段中填充的(在架构中使用 copyField 指令)。

【讨论】:

  • 根据字典,够了吗? subject 还是我必须做其他事情?
  • spellcheck.dictionary 不是配置选项,而是指示在运行时使用哪个字典的请求参数。如果您定义了多个字典,这将很有用。
  • 我已经成功构建了字典,但是当我运行 url 时:localhost:8983/solr/select?q=komputer&spellcheck=true 我没有得到任何建议 :(
  • 这完全取决于您构建词典所使用的文档。你在某处有索引“计算机”这个词吗?
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 2012-09-05
相关资源
最近更新 更多