Hi All, I've been debugging an issue where the query 'tpms' would make the spellchecker throw the following exception:
21021 [qtp91486057-17] ERROR org.apache.solr.servlet.SolrDispatchFilter – null:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.AbstractStringBuilder.replace(AbstractStringBuilder.java:789) at java.lang.StringBuilder.replace(StringBuilder.java:266) at org.apache.solr.spelling.SpellCheckCollator.getCollation(SpellCheckCollator.java:190) at org.apache.solr.spelling.SpellCheckCollator.collate(SpellCheckCollator.java:75) I have the following synonyms defined for tpms: tpms,service tire monitor,tire monitor,tire pressure monitor,tire pressure monitoring system,tpm,low tire warning,tire pressure monitor system Note that if you query any of the other synonyms there is no issue, only tpms. Looking at my field definition for my spellchecker I realized I am doing query time synonym expansion: <fieldType name="text_spell" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" /> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StandardFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" /> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StandardFilterFactory"/> </analyzer> </fieldType> I copied this field definition from: http://wiki.apache.org/solr/SpellCheckingAnalysis. As the issue seemed related to synonyms I removed the SynonymFilterFactory and everything works. I'm going to try to create a reproducible test case for the crash, but right now I'm wondering what I lose by not having synonym expansion when spell checking? Thanks Brendan