solr sugirió no devolver ningún resultado
spell-checking autosuggest (3)
Compruebe si el término-parámetro se establece en schema.xml, como:
<field name="TEXT" type="text_en" indexed="true" stored="true" multiValued="true"
termVectors="true"
termPositions="true"
termOffsets="true"/>
... reiniciar solr y reindexar de nuevo
He seguido el artículo de Solr wiki para sugerir casi a la T aquí: http://wiki.apache.org/solr/Suggester . Tengo el siguiente xml en mi solrconfig.xml:
<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
Solo recibo el siguiente resultado 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 muy útil. ¿Alguna sugerencia para ayudar a resolver esto?
Un par de cosas que puedo pensar que podrían causar este problema:
El campo fuente ("descripción") es incorrecto: asegúrese de que este sea realmente el campo que inicia los 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
<copyfield />
el diccionario, y uso<copyfield />
para copiar otros campos relevantes a eso.El término "barbacoa" no aparece en al menos el 5% de los registros (ha indicado este requisito al incluir
<float name="threshold">0.05</float>
) y, por lo tanto, no está incluido en el diccionario de búsquedaEn SpellCheckComponent, la configuración
<str name="spellcheck.onlyMorePopular">true</str>
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>
¿Podría ser el problema que estás consultando /suggest
lugar de /spell
../suggest/?q=barbequ
En mi configuración esta es la secuencia que paso:
/solr/spell?q=barbequ&spellcheck=true&spellcheck.collate=true
Y la primera vez que haces un corrector ortográfico debes incluir
&spellcheck.build=true
Me estoy ejecutando 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.