Carrie,

Thank you for trying out new features!  I'm pretty sure you've found a bug 
here.  Could you tell me whether you're using a build from Trunk or Solr_4x ?  
Also, do you know the svn revision or the Jenkins build # (or timestamp) you're 
working from?

Could you try instead to use DirectSolrSpellChecker instead of 
IndexBasedSpellChecker for your "default" dictionary?  (In Trunk and the 4.x 
branch, the Solr Example now uses DirectSolrSpellChecker as its default.)  It 
could be this is a problem related to using WordBreakSolrSpellChecker with the 
older IndexBasedSpellChecker.  So if you have better luck with 
DirectSolrSpellChecker, that would be helpful in honing in on the exact problem.

Also, judging from the line that is failing, could it be you're using a build 
based on svn revision pre-r1346489 (Trunk) or pre-r1346499 (Branch_4x) ?  
https://issues.apache.org/jira/browse/SOLR-2993  Shortly after the initial 
commit of this feature, a bug similar to the one you're reporting was later 
fixed with these subsequent revisions.  

James Dyer
E-Commerce Systems
Ingram Content Group
(615) 213-4311


-----Original Message-----
From: Carrie Coy [mailto:c...@ssww.com] 
Sent: Friday, June 15, 2012 2:46 PM
To: solr-user@lucene.apache.org
Subject: WordBreak and default dictionary crash Solr

Is this a configuration problem or a bug?

We use two dictionaries, default (spellcheckerFreq)  and 
solr.WordBreakSolrSpellChecker.  When a query contains 2 misspellings, 
one corrected by the default dictionary, and the other corrected by the 
wordbreak dictionary ("strawberryn shortcake") , Solr crashes with error 
below.   It doesn't matter which dictionary is checked first.

java.lang.NullPointerException
     at 
org.apache.solr.handler.component.SpellCheckComponent.toNamedList(SpellCheckComponent.java:566)
     at 
org.apache.solr.handler.component.SpellCheckComponent.process(SpellCheckComponent.java:177)
     at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:204)
     at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
     at 
org.apache.solr.core.RequestHandlers$LazyRequestHandlerWrapper.handleRequest(RequestHandlers.java:240)
     at org.apache.solr.core.SolrCore.execute(SolrCore.java:1555)
     at 
org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:442)
     at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:263)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
     at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
     at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
     at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
     at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
     at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
     at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
     at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
     at java.lang.Thread.run(Thread.java:662)


Multiple errors corrected by the SAME dictionary (either wordbreak or 
default) do not crash Solr.   Here is excerpt from our solrconfig.xml:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">textSpell</str>
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">spell</str>
<str name="combineWords">true</str>
<str name="breakWords">true</str>
<int name="maxChanges">1</int>
</lst>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">spell</str>
<str name="spellcheckIndexDir">spellcheckerFreq</str>
<str name="buildOnOptimize">true</str>
</lst>
</searchComponent>

<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
        .....
<str name="spellcheck.dictionary">wordbreak</str>
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck.count">3</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.onlyMorePopular">false</str>
</lst>
</requestHandler>



Reply via email to