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">USD</field> 
  3.   <field name="name">One Dollar</field> 
  4.   <field name="manu">Bank of America</field> 
  5.   <field name="manu_id_s">boa</field> 
  6.   <field name="cat">currency</field> 
  7.   <field name="features">Coins and notes</field> 
  8.   <field name="price_c">1,USD</field> 
  9.   <field name="inStock">true</field> 
  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">textSpell</str> 
  3.     <lst name="spellchecker"> 
  4.       <str name="name">direct</str> 
  5.       <str name="field">cat</str> 
  6.       <str name="classname">solr.DirectSolrSpellChecker</str> 
  7.       <str name="distanceMeasure">internal</str> 
  8.       <float name="accuracy">0.5</float> 
  9.       <int name="maxEdits">2</int> 
  10.       <int name="minPrefix">1</int> 
  11.       <int name="maxInspections">5</int> 
  12.       <int name="minQueryLength">4</int> 
  13.       <float name="maxQueryFrequency">0.01</float> 
  14. </lst> 
  15.  </searchComponent> 
  16. <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"> 
  17.     <lst name="defaults"> 
  18.       <str name="df">text</str> 
  19.       <str name="spellcheck.dictionary">direct</str> 
  20.       <str name="spellcheck">on</str> 
  21.       <str name="spellcheck.extendedResults">true</str>       
  22.       <str name="spellcheck.count">10</str> 
  23.       <str name="spellcheck.collate">true</str> 
  24.       <str name="spellcheck.collateExtendedResults">true</str>  
  25.     </lst> 
  26.     <arr name="last-components"> 
  27.       <str>spellcheck</str> 
  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">0</int> 
  4. <int name="QTime">27</int> 
  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">1</int> 
  11. <int name="startOffset">4</int> 
  12. <int name="endOffset">11</int> 
  13. <int name="origFreq">0</int> 
  14. <arr name="suggestion"> 
  15. <lst> 
  16. <str name="word">currency</str> 
  17. <int name="freq">4</int> 
  18. </lst> 
  19. </arr> 
  20. </lst> 
  21. <bool name="correctlySpelled">false</bool> 
  22. <lst name="collation"> 
  23. <str name="collationQuery">cat:currency</str> 
  24. <int name="hits">0</int> 
  25. <lst name="misspellingsAndCorrections"> 
  26. <str name="currenc">currency</str> 
  27. </lst> 
  28. </lst> 
  29. </lst> 
  30. </lst> 
  31. </response> 

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

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

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

So easy!

你可能感兴趣的:(Solr,solr4.2,spellcheck)