Hi Grant, Here are solr config files (attached) and java code (included below) to recreate the test case.
Jason List<Pair<String, Integer>> terms = new ArrayList<Pair<String, Integer>>(); terms.add(new Pair<String, Integer>("chanel", 834)); terms.add(new Pair<String, Integer>("chant", 10)); terms.add(new Pair<String, Integer>("chang", 8)); terms.add(new Pair<String, Integer>("chani", 4)); terms.add(new Pair<String, Integer>("chand", 1)); terms.add(new Pair<String, Integer>("chana", 1)); terms.add(new Pair<String, Integer>("charl", 1)); terms.add(new Pair<String, Integer>("chane", 1)); terms.add(new Pair<String, Integer>("chan", 106)); terms.add(new Pair<String, Integer>("chair", 1950)); int id = 0; final CommonsHttpSolrServer client = new CommonsHttpSolrServer(" http://solr:8080/solr/"); client.setParser(new XMLResponseParser()); for (Pair<String, Integer> term : terms) { final int freq = term.getSecond().intValue(); for (int i = 0; i < freq; ++i) { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", String.valueOf(++id)); doc.addField("description", term.getFirst()); client.add(doc); } } client.optimize(); Here's a Pair class: public class Pair<S, T> { S first; T second; public Pair(S _first, T _second) { this.first = _first; this.second = _second; } public S getFirst() { return this.first; } public T getSecond() { return this.second; } }
<?xml version="1.0" ?> <config> <abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError> <dataDir>${solr.data.dir:./solr/data}</dataDir> <indexDefaults> <useCompoundFile>false</useCompoundFile> <mergeFactor>10</mergeFactor> <ramBufferSizeMB>32</ramBufferSizeMB> <maxMergeDocs>2147483647</maxMergeDocs> <maxFieldLength>10000</maxFieldLength> <writeLockTimeout>1000</writeLockTimeout> <commitLockTimeout>10000</commitLockTimeout> <lockType>single</lockType> </indexDefaults> <mainIndex> <useCompoundFile>false</useCompoundFile> <ramBufferSizeMB>32</ramBufferSizeMB> <mergeFactor>10</mergeFactor> <maxMergeDocs>2147483647</maxMergeDocs> <maxFieldLength>10000</maxFieldLength> <unlockOnStartup>false</unlockOnStartup> </mainIndex> <updateHandler class="solr.DirectUpdateHandler2" /> <query> <maxBooleanClauses>1024</maxBooleanClauses> <filterCache class="solr.LRUCache" size="1024" initialSize="512" autowarmCount="256"/> <queryResultCache class="solr.LRUCache" size="16384" initialSize="4096" autowarmCount="256"/> <documentCache class="solr.LRUCache" size="16384" initialSize="4096" autowarmCount="0"/> <enableLazyFieldLoading>true</enableLazyFieldLoading> <useFilterForSortedQuery>true</useFilterForSortedQuery> <queryResultWindowSize>50</queryResultWindowSize> <queryResultMaxDocsCached>200</queryResultMaxDocsCached> <HashDocSet maxSize="3000" loadFactor="0.75"/> <boolTofilterOptimizer enabled="true" cacheSize="32" threshold=".05"/> <maxWarmingSearchers>4</maxWarmingSearchers> </query> <requestDispatcher handleSelect="true" > <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" /> <httpCaching lastModifiedFrom="openTime" etagSeed="Solr" /> </requestDispatcher> <requestHandler name="standard" class="solr.StandardRequestHandler" default="true"> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int> <str name="fl">*</str> </lst> </requestHandler> <requestHandler name="dismax" class="solr.DisMaxRequestHandler" > <str name="qf">description</str> <str name="fl">id description</str> <arr name="last-components"> <str>spellcheck</str> </arr> </requestHandler> <searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent"> <lst name="defaults"> <str name="spellcheck.onlyMorePopular">true</str> <str name="spellcheck.extendedResults">true</str> <str name="spellcheck.count">10</str> </lst> <lst name="spellchecker"> <str name="name">default</str> <str name="field">spellField</str> <str name="spellcheckIndexDir">./spellchecker</str> <str name="accuracy">0.5</str> <str name="buildOnCommit">true</str> </lst> <str name="queryAnalyzerFieldType">textSpell</str> </searchComponent> <queryConverter name="queryConverter" class="org.apache.solr.spelling.SpellingQueryConverter"/> <requestHandler name="/mlt" class="solr.MoreLikeThisHandler"> <lst name="defaults"> <str name="mlt.fl">manu,cat</str> <int name="mlt.mindf">1</int> </lst> </requestHandler> <requestHandler name="/search" class="org.apache.solr.handler.component.SearchHandler"> <lst name="defaults"> <str name="echoParams">explicit</str> </lst> </requestHandler> <requestHandler name="/elevate" class="org.apache.solr.handler.component.SearchHandler" startup="lazy"> <lst name="defaults"> <str name="echoParams">explicit</str> </lst> <arr name="last-components"> <str>elevator</str> </arr> </requestHandler> <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /> <requestHandler name="/analysis" class="solr.AnalysisRequestHandler" /> <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" /> <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" /> <requestHandler name="/admin/ping" class="PingRequestHandler"> <lst name="defaults"> <str name="qt">standard</str> <str name="q">solrpingquery</str> <str name="echoParams">all</str> </lst> </requestHandler> <highlighting> <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true"> <lst name="defaults"> <int name="hl.fragsize">100</int> </lst> </fragmenter> <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter"> <lst name="defaults"> <int name="hl.fragsize">70</int> <float name="hl.regex.slop">0.5</float> <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str> </lst> </fragmenter> <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true"> <lst name="defaults"> <str name="hl.simple.pre"><![CDATA[<em>]]></str> <str name="hl.simple.post"><![CDATA[</em>]]></str> </lst> </formatter> </highlighting> <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter"> <int name="xsltCacheLifetimeSeconds">5</int> </queryResponseWriter> <admin> <defaultQuery>solr</defaultQuery> </admin> </config>
<?xml version="1.0" ?> <schema name="example" version="1.1"> <types> <fieldtype name="string" class="solr.StrField" sortMissingLast="true"/> <fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true"/> <fieldtype name="integer" class="solr.IntField"/> <fieldtype name="long" class="solr.LongField"/> <fieldtype name="float" class="solr.FloatField"/> <fieldtype name="double" class="solr.DoubleField"/> <fieldtype name="sint" class="solr.SortableIntField" sortMissingLast="true"/> <fieldtype name="slong" class="solr.SortableLongField" sortMissingLast="true"/> <fieldtype name="sfloat" class="solr.SortableFloatField" sortMissingLast="true"/> <fieldtype name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true"/> <fieldtype name="date" class="solr.DateField" sortMissingLast="true"/> <fieldtype name="text_lu" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StandardFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory"/> <filter class="solr.EnglishPorterFilterFactory"/> <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> </analyzer> </fieldtype> <fieldtype name="text_ws" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory"/> </analyzer> </fieldtype> <fieldtype name="text" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> </analyzer> </fieldtype> <fieldtype name="textSpell" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> </analyzer> </fieldtype> <fieldtype name="textTight" class="solr.TextField" positionIncrementGap="100" > <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> <filter class="solr.StopFilterFactory" ignoreCase="true"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> </analyzer> </fieldtype> </types> <fields> <field name="id" type="string" indexed="true" stored="true"/> <field name="description" type="text" indexed="true" stored="true"/> <field name="spellField" type="textSpell" indexed="true" stored="true" /> <dynamicField name="*_i" type="sint" indexed="true" stored="true"/> <dynamicField name="*_s" type="string" indexed="true" stored="true"/> <dynamicField name="*_l" type="slong" indexed="true" stored="true"/> <dynamicField name="*_t" type="text" indexed="true" stored="true"/> <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> <dynamicField name="*_f" type="sfloat" indexed="true" stored="true"/> <dynamicField name="*_d" type="sdouble" indexed="true" stored="true"/> <dynamicField name="*_dt" type="date" indexed="true" stored="true"/> </fields> <uniqueKey>id</uniqueKey> <defaultSearchField>description</defaultSearchField> <copyField source="description" dest="spellField" /> </schema>