2012-09-25 60 views
6

我想使用solr为搜索字段创建一个autosuggestion下拉菜单,但当我尝试获取短语的建议时,我陷入了困境。当我搜索“狗t”时,我想要得到一个结果集,其中包含诸如“狗处理”,“狗技巧”,“狗标记”等短语,但是我得到2个结果集,一个用于“狗” “(如‘狗’,‘狗骨头’,‘狗’......),另一个是‘T’(如‘树’的‘时间’......)get solr autosuggest结果短语

我查询网址是:

http://localhost:8985/solr/mycollection/suggest?q=%22dog%20t%22&wt=json 

和我的请求处理在solrconfig定义...

<searchComponent class="solr.SpellCheckComponent" name="suggest"> 
    <lst name="spellchecker"> 
     <str name="name">suggest</str> 
     <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
     <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> 
     <str name="field">suggest</str> <!-- the indexed field to derive suggestions from --> 
     <float name="threshold">0.0001</float> 
     <str name="buildOnCommit">true</str> 
    </lst> 
<str name="queryAnalyzerFieldType">textSuggest</str> 
    </searchComponent> 

    <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest"> 
    <lst name="defaults"> 
     <str name="spellcheck">true</str> 
     <str name="spellcheck.dictionary">suggest</str> 
     <str name="spellcheck.onlyMorePopular">true</str> 
     <str name="spellcheck.count">10</str> 
    </lst> 
    <arr name="components"> 
     <str>suggest</str> 
    </arr> 
    </requestHandler> 

的“建议”的字段类型的模式被定义为

<fieldType name="textSuggest" class="solr.TextField" positionIncrementGap="100" > 
     <analyzer type="index"> 
<tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" /> 
<filter class="solr.WordDelimiterFilterFactory" 
       generateWordParts="1" 
       generateNumberParts="1" 
       catenateWords="0" 
       catenateNumbers="0" 
       catenateAll="0" 
       preserveOriginal="1" splitOnCaseChange="1" 
       /> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
    </fieldType> 

回答

6

我发现2个解决我的问题......

之一是创建一个自定义queryHandler不分裂的Q参数为多个单词。

另一种选择,其中我选择,是使用参数spellcheck.q代替Q的。我正在使用solr 3.4.0并使用spellcheck.q给了我一个500错误。我更新了solr到3.6.1,它现在似乎正常工作。