Solr y el problema con palabras con tilde

24/05/2013       Sergio Raposo Vargas       Administración, Bugs y Errores, OpenCms 8

Cuando usamos solr para realizar búsqueda de texto nos encontramos con los clásicos errores de encoding de tildes y otros caracteres que tenemos en nuestro idioma y que pueden traernos problemas a la hora de configurar nuestras búsquedas.

El principal problema que tenemos con la configuración por defecto de solr en OpenCms son las tildes. Por defecto, Solr es capaz de indexar las palabras con tildes pero para localizarlas posteriormente es necesario indicar la palabra exacta con las tildes correctas. Es decir, si tenemos un contenido que contiene la palabra 'vídeo', y escribimos en nuestro buscador 'video' no encontraremos ningún resultado.

El funcionamiento ideal, tal y cómo funcionan los buscadores normalmente es que sea capaz de no distinguir entre la búsqueda de vídeo y video. Para conseguir esta funcionalidad en solr existe un filtro que es capaz de ignorar este tipo de caracteres:

<filter class="solr.ASCIIFoldingFilterFactory"/>

Este filtro convierte los caracteres unicode alfabéticos, numéricos y simbólicos que no están en los primeros 127 caracteres ASCII (el bloque de Unicode "Latín básico") en sus equivalentes ASCII, si existe.

Para añadir este filtro en nuestro buscador, debemos irnos a la carpeta /$OPENCMS_HOME/WEB-INF/solr/conf/ y editar el fichero schema.xml. En la configuración del campo text_general, podemos añadir dicho filtro quedando de la siguiente forma:

<!-- A general text field -->
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>

Una vez modificado este fichero, reiniciamos nuestro servidor, reindexamos todos nuestros índices solr y tendremos resuelto el problema. 

 OpenCms 8.5, Solr, Tildes