2011-07-11 14 views
22

He seguido el artículo de Solr wiki para sugerencias casi a la T aquí: http://wiki.apache.org/solr/Suggester. Tengo el siguiente código XML en mi solrconfig.xml:sugerencia de solr que no devuelve ningún resultado

<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">description</str> 
    <float name="threshold">0.05</float> 
    <str name="buildOnCommit">true</str> 
    </lst> 
</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">5</str> 
    <str name="spellcheck.collate">true</str> 
    </lst> 
    <arr name="components"> 
    <str>suggest</str> 
    </arr> 
</requestHandler> 

Sin embargo, cuando ejecuto la siguiente consulta (o algo similar):

../suggest/?q=barbequ 

sólo obtiene el siguiente resultado de nuevo xml:

<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">78</int> 
    </lst> 
    <lst name="spellcheck"> 
     <lst name="suggestions"/> 
    </lst> 
</response> 

Como puede ver, esto no es de mucha ayuda. ¿Alguna sugerencia para ayudar a resolver esto?

Respuesta

21

Un par de cosas que puedo pensar de esa podría causar este problema:

  • el campo de origen ("descripción") es incorrecta - asegurarse de que esto es de hecho el campo que las semillas de términos para su corrector ortográfico. Incluso podría ser que el campo sea un caso diferente (por ejemplo, "Descripción" en lugar de "Descripción").

  • El campo de origen de su schema.xml no está configurado correctamente o está siendo procesado por filtros que hacen que el diccionario de origen no sea válido. Utilizo un campo separado para inicializar el diccionario, y uso <copyfield /> para copiar otros campos relevantes a eso.

  • El término "barbacoa" no aparece en al menos un 5% de los registros (Usted ha indicado este requisito mediante la inclusión de <float name="threshold">0.05</float>) y por lo tanto no está incluido en el diccionario de búsqueda

  • En SpellCheckComponent la <str name="spellcheck.onlyMorePopular">true</str> configuración significa que solo los términos que producirían más resultados se devuelven como sugerencias. De acuerdo con la documentación de Suggester, esta tiene una función diferente (ordenando sugerencias por peso), pero podría valer la pena cambiar esto a falso para ver si está causando el problema.

partes relevantes de mi schema.xml:

<schema> 
    <types> 
     <!-- Field type specifically for spell checking --> 
     <fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
      <analyzer type="index"> 
       <tokenizer class="solr.StandardTokenizerFactory" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <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="stopwords.txt" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.StandardFilterFactory" /> 
      </analyzer> 
     </fieldType> 
    </types> 
    <fields> 
     <field name="spell" type="textSpell" indexed="true" stored="false" multiValued="true" /> 
    </fields> 

    <!-- Copy fields which are used to seed the spell checker --> 
    <copyField source="name" dest="spell" /> 
    <copyField source="description" dest="spell" /> 
<schema> 
+0

Puede elaborar esto: De acuerdo con la documentación de Suggester esto tiene una función diferente (ordenando sugerencias por peso) pero podría valer la pena cambiar esto a falso para ver si está causando el problema. –

1

Compruebe si el término parámetros se encuentran en el schema.xml, como:

<field name="TEXT" type="text_en" indexed="true" stored="true" multiValued="true" 
        termVectors="true" 
        termPositions="true" 
        termOffsets="true"/> 

... reinicio Solr y REINDEX nuevo

+0

Agregué termVectors = "true", termPositions = "true" y termOffsets = "true" a mi término-parámetro existente (todo lo demás era igual) pero sigue siendo el mismo resultado que el anterior. – Marquis

+0

¿Se ha reiniciado y vuelto a indexar? ¿Estás seguro de que tu definición de tipo de campo no sobrescribe esa configuración? Probablemente no hay retransmisión, ¿no hay sugerencias? –

+0

sí, reinicié y volví a indexar. No creo que se sobrescriba. Sé que hay miles de productos que se devuelven perfectamente con la consulta/select. ¿Hay alguna manera de verificar que las sugerencias estén ahí? Además, intenté incorporar este método de revisión ortográfica también: http://wiki.apache.org/solr/SpellCheckComponent. Lo mismo, no se devolvieron resultados en el nodo de revisión ortográfica. – Marquis

6

Podría ser que el problema está consultando /suggest en lugar de /spell

../suggest/?q=barbequ

En mi configuración de la cadena esta Paso adentro:

/solr/spell?q=barbequ&spellcheck=true&spellcheck.collate=true

Y la primera vez que se hace una corrección ortográfica que necesita para incluir

&spellcheck.build=true

estoy corriendo en Solr 4 por cierto. Entonces, quizás/suggest es un punto final completamente diferente que hace algo más. Si es así, discúlpate.

+0

gracias! ¡el spellckec.build = verdadero funcionó! –

Cuestiones relacionadas