掲示板

Añadir analyzer español para Liferay 6.1.x - Como hacerlo fácil :)

thumbnail
10年前 に Sergio Romero Zayas によって更新されました。

Añadir analyzer español para Liferay 6.1.x - Como hacerlo fácil :)

Regular Member 投稿: 151 参加年月日: 08/04/14 最新の投稿
Todos los que trabajéis con Liferay 6.1.x y en vuestras instalaciones hagáis uso del portlet buscador, habréis observado el problema con las tildes. Es decir, que si buscáis "registro" os saldrá un resultado y si buscáis "registró" otro diferente. Lo normal es que te ignorará las tildes y que la búsqueda fuera igual a "registro & registró".

Para solucionar este problema, en versiones anteriores de Liferay, se podía indicar mediante el uso de una propiedad en el fichero "portal-ext.properties" que analizador queríamos que usara Liferay por defecto. En la versión 6.1.x, esto se ha eliminado, puesto que la indexación se ha mejorado y se ha diversificado, con lo que la complejidad de su adaptación a nuestra necesidad aumenta, pero también su potencia.

La solución es bien simple,es suficiente con añadir el ASCIIFoldingFilter al stream de tokens del StandardAnalyzer, para mayor facilidad se crea una clase que podamos inyectar y extendiendo la StandardAnalyzer.

Vamos al lío:

En primer lugar hay que crear un proyecto EXT, haciendo uso del plugin de Liferay para Eclipse, o Liferay IDE como muchos decimos. A este proyecto le he llamado spanish-analyzer-ext. Tu le puedes llamar como quieras.

En el proyecto he creado 2 clases en --> "/spanish-analyzer-ext/docroot/WEB-INF/ext-impl/src"
La primera:

package com.spanish.analyzer;

import java.io.Reader;

import org.apache.lucene.analysis.ASCIIFoldingFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.util.Version;

public class SpanishAnalyzer extends StandardAnalyzer {

	public SpanishAnalyzer(Version matchVersion) {
		super(matchVersion);
		
	}

	@Override
	public TokenStream tokenStream(String fieldName, Reader reader) {

		TokenStream result = super.tokenStream(fieldName, reader);

		result = new ASCIIFoldingFilter(result);

		return result;
	}

}

y la segunda para pasarle también el ASCIIFoldingFilter al KeywordAnalyzer


package com.spanish.analyzer;

import java.io.Reader;

import org.apache.lucene.analysis.ASCIIFoldingFilter;
import org.apache.lucene.analysis.KeywordAnalyzer;
import org.apache.lucene.analysis.TokenStream;

public class SpanishKeywordAnalyzer extends KeywordAnalyzer {
   
    public SpanishKeywordAnalyzer() {
    	super();
	}

    public final TokenStream tokenStream(String fieldName, Reader reader) {
       
        TokenStream result = super.tokenStream(fieldName, reader);
       
        result = new ASCIIFoldingFilter(result);
       
        return result;
    }   
}


Después creamos la carpeta "META-INF" en "/spanish-analyzer-ext/docroot/WEB-INF/ext-impl/src/" y dentro metemos el descriptor "search-spring.xml"

En este fichero añado varias líneas.
En la zona de "Lucene analyzers" añado el key entry:

<entry key=".*_es_ES" value-ref="com.spanish.analyzer.SpanishAnalyzer" />

Algo más abajo añado el bean justo antes del StandardAnalyzer

<bean id="com.spanish.analyzer.SpanishAnalyzer" class="com.spanish.analyzer.SpanishAnalyzer">
		<constructor-arg ref="org.apache.lucene.util.Version" />
</bean>


Una vez hecho esto, tan solo hay que empaquetar, desplegar el paquete de extensión en Liferay, una vez desplegado, reiniciar el servidor y a través del panel de control, reindexar. Cuando volvamos a buscar ya tendremos el resultado esperado.

Espero haber ayudado a alguien que se encuentre con esta problemática.

Agradezco la ayuda a Daniel Sanz, Alfredo del Castillo y Juan Fernández.
10年前 に Carlos Vicente によって更新されました。

RE: Añadir analyzer español para Liferay 6.1.x - Como hacerlo fácil :)

Junior Member 投稿: 25 参加年月日: 10/06/08 最新の投稿
Creo que hay una manera aún mejor. Y es usando Solr. Una de las principales ventajas es que no tendrás que hacer hooks e historias. Solo configurar solr que ya viene con todos los analizadores, stopwords lexers, incluso puedes configurarlo para que no diferencie singulares y plurales.
thumbnail
10年前 に Sergio Romero Zayas によって更新されました。

RE: Añadir analyzer español para Liferay 6.1.x - Como hacerlo fácil :)

Regular Member 投稿: 151 参加年月日: 08/04/14 最新の投稿
Barajé el tema de usar SOLR, pero el problema que tengo con SOLR, es que necesito montar un servidor para él, para que rinda medio en condiciones, además de configurar el portlet del marketplace, etc. al menos así lo hacia en versiones anteriores de Liferay 6.0.x.

Además de que no me entraba por temas de requisitos previos. Evidentemente SOLR es mejor opción para potenciar las búsquedas. Siempre dije que SOLR es un lucene muy vitaminado jeje emoticon

Anímate y hazte un post de SOLR en español ;)
thumbnail
10年前 に Sergio Romero Zayas によって更新されました。

RE: Añadir analyzer español para Liferay 6.1.x - Como hacerlo fácil :)

Regular Member 投稿: 151 参加年月日: 08/04/14 最新の投稿
Carlos Vicente:
Creo que hay una manera aún mejor. Y es usando Solr. Una de las principales ventajas es que no tendrás que hacer hooks e historias. Solo configurar solr que ya viene con todos los analizadores, stopwords lexers, incluso puedes configurarlo para que no diferencie singulares y plurales.


He estado intentando hacer un manual de instalación de integración de SOLR con Liferay, porque de la versión 6.0.x a la 6.1.x pensaba que no había diferencias y me he encontrado con bastantes sorpresas, sobre todo con el plugin solr-web.

Bajar el plugin del market, hacer deploy y...

ERROR [pool-2-thread-2][PortletApplicationContext:145] org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Bean class [com.liferay.portal.spring.context.PortletBeanFactoryPostProcessor] not found Offending resource: ServletContext resource [/WEB-INF/classes/META-INF/solr-spring.xml]
....


Cataplun! Error que te crió.
Me pongo a mirar un poco, y por lo que se ve, bug sin resolver.
bug --> https://github.com/permeance/liferay-log-viewer/issues/1
bug-> http://issues.liferay.com/browse/LPS-35534


Entonces me quedo un poco "catacrocker" y pienso en voz alta:

¿Cómo en 2013 aún estoy con los mismos problemas con el idioma Español?. Me veo haciendo las mismas cosas que con OpenCMS en 2006/2007.... ¿tan poco negocio hay con los países de habla hispana como para que aún sigamos haciendo exactamente lo mismo?


Es una reflexión en voz alta. Disculpen mi indolencia, pero estoy un poquito exasperado con el tema del castellano...

sigo partiéndome la cabeza, os voy contando...
thumbnail
10年前 に Pedro Boado によって更新されました。

RE: Añadir analyzer español para Liferay 6.1.x - Como hacerlo fácil :)

New Member 投稿: 3 参加年月日: 11/11/09 最新の投稿
El tema del soporte a español en Liferay es cosa más de Lucene que del propio Liferay ya que no lo soportaron hasta hace nada. De todas formas, en la versión 6.1 GA3 ya han actualizado a una versión en condiciones de Lucene que cuenta con analizadores para castellano ( e incluso, gallego, catalán, etc ) . Y la gente de Liferay ha actualizado el spring-search.xml y ya se analizan los contenidos internacionalizados con el analizador correcto.
thumbnail
9年前 に Jonatan Oyola によって更新されました。

RE: Añadir analyzer español para Liferay 6.1.x - Como hacerlo fácil :)

Regular Member 投稿: 193 参加年月日: 07/06/06 最新の投稿
Hola. Estoy utilizando Solr, y todo mi contenido del CMS lo guardo como español.

Pero las busqueda no me funciona como lo espero.

Si busco: Colón. Lo encuentra. Si busco: Colon. No lo encuentra.

Alguna idea????
thumbnail
9年前 に Pedro Boado によって更新されました。

RE: Añadir analyzer español para Liferay 6.1.x - Como hacerlo fácil :)

New Member 投稿: 3 参加年月日: 11/11/09 最新の投稿
Jonatan Oyola:
Hola. Estoy utilizando Solr, y todo mi contenido del CMS lo guardo como español.

Pero las busqueda no me funciona como lo espero.

Si busco: Colón. Lo encuentra. Si busco: Colon. No lo encuentra.

Alguna idea????


Pues hay que configurar Solr para que use un analyzer en español. Está bastante bien documentado en Internet. No hay configuración en la parte de Liferay.

https://wiki.apache.org/solr/LanguageAnalysis#Spanish