• 注册
当前位置:1313e > 默认分类 >正文

solr学习之(四)_solr4.2.0版本的spellCheck功能的实现

 尽管solr4.2spellcheck功能已经配置在solr\collection1\conf\solrconfig.xml文件中了,但是我一直没有正确地看到这个模块的效果。晚上再认真看了一下apache_solr_4_cookbook.pdf这本书,然后按照书本描述配置了一下。

       solr4.0以前的版本中,spellcheck功能都需要构建自己的索引,每次配置后都需要更新索引,比较麻烦。而solr4.0以后,通过solr.DirectSolrSpellchecker就可以在main索引中直接用spellcheck功能了。通过观察solr-4.2.0\example\exampledocs\money.xml文件,我们可以看到里面有一个cat属性。

  1. <doc> 
  2.   <field name="id">USDfield> 
  3.   <field name="name">One Dollarfield> 
  4.   <field name="manu">Bank of Americafield> 
  5.   <field name="manu_id_s">boafield> 
  6.   <field name="cat">currencyfield> 
  7.   <field name="features">Coins and notesfield> 
  8.   <field name="price_c">1,USDfield> 
  9.   <field name="inStock">truefield> 
  10. doc> 

我这里就以cat属性为例,学习一下solr4.2中实现spellcheck的功能。

第一步:把solrconfig.xml

 

  1. <searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
  2. …… 
  3. searchComponent> 
  4. <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"> 
  5. …… 
  6. requestHandler> 

配置成如下:

  1. <searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
  2.     <str name="queryAnalyzerFieldType">textSpellstr> 
  3.     <lst name="spellchecker"> 
  4.       <str name="name">directstr> 
  5.       <str name="field">catstr> 
  6.       <str name="classname">solr.DirectSolrSpellCheckerstr> 
  7.       <str name="distanceMeasure">internalstr> 
  8.       <float name="accuracy">0.5float> 
  9.       <int name="maxEdits">2int> 
  10.       <int name="minPrefix">1int> 
  11.       <int name="maxInspections">5int> 
  12.       <int name="minQueryLength">4int> 
  13.       <float name="maxQueryFrequency">0.01float> 
  14. lst> 
  15.  searchComponent> 
  16. <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"> 
  17.     <lst name="defaults"> 
  18.       <str name="df">textstr> 
  19.       <str name="spellcheck.dictionary">directstr> 
  20.       <str name="spellcheck">onstr> 
  21.       <str name="spellcheck.extendedResults">truestr>       
  22.       <str name="spellcheck.count">10str> 
  23.       <str name="spellcheck.collate">truestr> 
  24.       <str name="spellcheck.collateExtendedResults">truestr>  
  25.     lst> 
  26.     <arr name="last-components"> 
  27.       <str>spellcheckstr> 
  28.     arr> 
  29.   requestHandler> 

然后重启tomcat,在浏览器的地址栏输入:

http://localhost:8983/solr/spell?q=cat:currenc&spellcheck=true

我们就可以看到:

  1. <response> 
  2. <lst name="responseHeader"> 
  3. <int name="status">0int> 
  4. <int name="QTime">27int> 
  5. lst> 
  6. <result name="response" numFound="0" start="0"/> 
  7. <lst name="spellcheck"> 
  8. <lst name="suggestions"> 
  9. <lst name="currenc"> 
  10. <int name="numFound">1int> 
  11. <int name="startOffset">4int> 
  12. <int name="endOffset">11int> 
  13. <int name="origFreq">0int> 
  14. <arr name="suggestion"> 
  15. <lst> 
  16. <str name="word">currencystr> 
  17. <int name="freq">4int> 
  18. lst> 
  19. arr> 
  20. lst> 
  21. <bool name="correctlySpelled">falsebool> 
  22. <lst name="collation"> 
  23. <str name="collationQuery">cat:currencystr> 
  24. <int name="hits">0int> 
  25. <lst name="misspellingsAndCorrections"> 
  26. <str name="currenc">currencystr> 
  27. lst> 
  28. lst> 
  29. lst> 
  30. lst> 
  31. response> 

解析一下吧:我输入的q=cat:currenc实际上是没有拼写正确的,正确的应该是currencycat表示索引的一个field

所以呢,会有这样的结果反馈:

  1. <bool name="correctlySpelled">falsebool>   表示拼写错误 
  2. <lst name="collation"> 
  3. <str name="collationQuery">cat:currencystr> 
  4. <int name="hits">0int> 
  5. <lst name="misspellingsAndCorrections"> 
  6. <str name="currenc">currencystr>  正确的结果应该是:currency。 

So easy!

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录