Solr summester throws stackoverflow error

Below is the error when using solr. Has anyone encountered a similar error. Is the error due to restrictions in the search factory.

Mistake

{"error":{"msg":"java.lang.StackOverflowError", "trace":"java.lang.RuntimeException: java.lang.StackOverflowError org.apache.solr.servlet.HttpSolrCall.sendError(HttpSolrCall.java:618) org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:477) org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:214) org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:179) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) org.eclipse.jetty.server.Server.handle(Server.java:499) org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) java.lang.Thread.run(Thread.java:745)\nCaused by: java.lang.StackOverflowError org.apache.lucene.util.automaton.Operations.topoSortStatesRecurse(Operations.java:1311) 

Config Schema.xml

 <field name="description" type="text_ja" stored="true" indexed="true" multiValued="true"/> <field name="textSuggest" type="textSuggest" indexed="true" stored="true" multiValued="true"/> <copyField source="description" dest="text"/> 

Solrconfig.xml

 <searchComponent name="suggest" class="solr.SuggestComponent"> <lst name="suggester"> <str name="name">Suggester</str> <str name="lookupImpl">FuzzyLookupFactory</str> <str name="dictionaryImpl">DocumentDictionaryFactory</str> <str name="field">textSuggest</str> <!-- <str name="weightField">price</str> --> <str name="suggestAnalyzerFieldType">string</str> <str name="buildOnStartup">false</str> <str name="buildOnCommit">false</str> </lst> </searchComponent> <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" > <lst name="defaults"> <str name="suggest">true</str> <str name="suggest.count">10</str> </lst> <arr name="components"> <str>suggest</str> </arr> </requestHandler> 
+8
java solr
source share
2 answers

Try using the keyword field as an imput for the expert as a workaround. This did the trick for me on the 17M document index. But this is only useful if the content of the field is just a few words. In longer texts this will not give useful suggestions.

schema.xml

 <fieldType name="text_keyword_low" class="solr.TextField"> <analyzer> <tokenizer class="solr.KeywordTokenizerFactory" /> <filter class="solr.LowerCaseFilterFactory" /> </analyzer> </fieldType> <fields> <field name="SUGGEST_COPY" type="text_keyword_low" indexed="true" stored="true" multiValued="true" /> </fields> 

solrconfig.xml

 <searchComponent name="sugBySugComp" class="solr.SuggestComponent"> <lst name="suggester"> <str name="name">sugBySugDictonary</str> <str name="dictionaryImpl">DocumentDictionaryFactory</str> <str name="payloadField">MEDIA_ID</str> <str name="lookupImpl">FuzzyLookupFactory</str> <str name="storeDir">sugBySugDir</str> <str name="field">SUGGEST_COPY</str> <str name="suggestAnalyzerFieldType">suggest_field</str> <str name="buildOnStartup">false</str> <str name="buildOnCommit">false</str> </lst> </searchComponent> <requestHandler name="/sugBySug" class="solr.SearchHandler" startup="lazy"> <lst name="defaults"> <str name="suggest">true</str> <str name="suggest.count">10</str> <str name="suggest.dictionary">sugBySugDictonary</str> </lst> <arr name="components"> <str>sugBySugComp</str> </arr> </requestHandler> 
+1
source share

I also had a problem: the client asked me to activate the tester module on the Win2008 machine with the documents Solr 5.5.0, 1 core / node, 500k +.

I believe that StackOverflowError is due to some implementation of the FuzzyLookupFactory , which does not work properly when it has to build a large search data structure from scratch.

I was not able to get the inspector to work with FuzzyLookupFactory, in this situation the only solution for me activated it using FreeTextLookupFactory .

I will publish excerpts from my configuration files, I hope this helps:

solrconfig.xml

 <searchComponent name="suggest" class="solr.SuggestComponent"> <lst name="suggester"> <str name="name">mySuggester</str> <str name="lookupImpl">FreeTextLookupFactory</str> <str name="dictionaryImpl">DocumentDictionaryFactory</str> <str name="field">content</str> <str name="suggestFreeTextAnalyzerFieldType">suggestTypeLc</str> <str name="buildOnStartup">true</str> <str name="buildOnCommit">false</str> </lst> </searchComponent> <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> <lst name="defaults"> <str name="suggest">true</str> <str name="suggest.count">10</str> <str name="suggest.dictionary">mySuggester</str> </lst> <arr name="components"> <str>suggest</str> </arr> </requestHandler> 

schema.xml

 <fieldType name="suggestTypeLc" class="solr.TextField" positionIncrementGap="100"> <analyzer> <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^a-zA-Z0-9]" replacement=" " /> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> 


Another link here and in the documentation here .


Note:

  • The buildOnCommit parameter value was set to false to improve performance.
  • suggestTypeLc implements an analyzer that takes into account only alphanumeric / numerical character in lower case, although the results in the original case
  • Even if the buildOnStartup parameter is set to true, I noticed that it does not work. As the first operation after rebooting, I have to manually execute the request with the parameter "suggest.build = true" so that it is actually created. eg.

    http://localhost:82/solr/mycore/suggest?suggest=true&suggest.build=true&suggest.dictionary=mySuggester&wt=json&suggest.q=docum

    In my configuration, this usually takes a few minutes. The following queries without creating power is a matter of milliseconds.

0
source share

All Articles