2012-09-25 29 views
6

Quiero usar solr para crear un menú desplegable de autosugestión para un campo de búsqueda, pero me estoy atascado cuando trato de obtener sugerencias para una frase. Cuando busco "dog t", quiero obtener un conjunto de resultados que contenga frases como "dog treat", "dog trick", "dog tags", ... pero en cambio obtengo 2 conjuntos de resultados, uno para "dog" "(como "perros" "hueso de perro" "perrito" ...) y otra para "t"(como "árbol" "tiempo" ...)obtener solr autosuggest resultados para la frase

Mi consulta url es:

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

y mi controlador de solicitudes se define en solrconfig como ...

<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> 

El FieldType de "sugerir" se define en el esquema como

<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> 

Respuesta

6

me encontré con 2 soluciones a mi problema ...

Una es crear un queryHandler personalizado que no se descompone el parámetro q en múltiples palabras.

La otra opción, que he elegido, es utilizar el spellcheck.q parámetro en lugar de q. Estaba usando Solr 3.4.0 y el uso de spellcheck.q me dio un error de 500. Actualicé solr a 3.6.1 y parece funcionar correctamente ahora.

2

SOLR proporciona que sugirieron como FST (Sugerencias desde el comienzo del campo), AnalyzingInfix la que podemos aprovechar para generar inteligentes frase/palabra autosugestiones. Lea este artículo para obtener más información sobre la implementación http://lucidworks.com/blog/solr-suggester/

Cuestiones relacionadas