Fórum

Indexar Datos de una base de datos Externa en Lucene.

Sergio Lizana, modificado 8 Anos atrás.

Indexar Datos de una base de datos Externa en Lucene.

New Member Postagens: 17 Data de Entrada: 30/11/15 Postagens Recentes
Buenos días,
Llevo bastantes días intentando indexar datos de 2 tablas de una base de datos externa y no consigo dar con la solución, he mirado en múltiples foros, seguido algunos vídeos y todos hacen lo mismo "ya sea añadir un libro e indexarlo u otro tipo de objeto".
Yo lo que necesito es que 2 tablas que ya tienen datos dados de alta, coger unas columnas de esas tablas e indexarlas para luego poder buscarlas en el buscador.
Os comento los pasos que he seguido y en que punto me encuentro, a ver si ustedes me pueden ayudar.

1º - Añado en el portal-ext.properties la base de datos a la que voy a acceder.
2º- Creo un Servicio
3º- En el service.xml pongo los datos de las tablas para que se creen bien el modelo con el service builder.


4º- Después de esto hago un build-service y sin problemas me crea el modelo en java.


5-Añado el fichero EXT-SPRING.


Despues de esto hago deploy y todo correcto.

A partir de aquí ya no se seguir, he creado una clase java que extiende de base indexer para intentar indexar datos pero no soy capaz de comprender como puedo coger todos los datos que quiero que se indexen de una tabla e indexarlos en lucene.

Los campos que quiero indexar de esas tablas son:

De Operadores:
- deno_empresa
- deno_empresa_abrev
- nombre_comercial
- CIF
Municipio
- deno_municipio

Espero que me puedan ayudar.

Un saludo, Sergio
thumbnail
Jorge Díaz, modificado 8 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

Liferay Master Postagens: 753 Data de Entrada: 09/01/14 Postagens Recentes
Buenos días,

Tienes más información en el siguiente enlace: https://dev.liferay.com/develop/learning-paths/mvc/-/knowledge_base/6-2/enabling-search-and-indexing-for-guestbook-entries

Primero tienes que implementar en tu clase OperadorIndexer o MunicipioIndexer los métodos doReindex y doDelete, así como el doReindex a nivel de company para las reindexaciones completas (en el enlace anterior tienes ejemplos o sino te puedes descargar el código de Liferay donde también puedes tomar ejemplos)

Después tienes que añadir las anotaciones de indexación o llamar directamente al API de indexación en los métodos de tu código de Liferay que añaden/modifican/eliminan objetos de tus tablas (en las clases *ServiceImpl), de esta manera se lanza la reindexacion de dichos elementos modificados (ver último apartado del enlace anterior)

Una cosa que tienes que considerar es que aunque los datos estén en una base de datos externa, sólo los debes modificar desde Liferay, ya que de otro modo tendrás problemas:
  • El indexer sólo indexará los cambios realizados desde Liferay
  • Liferay cachea la información consultada a la BBDD y se encarga de limpiar la caché en caso de modificaciones desde el API de Liferay. Si actualizas datos desde fuera, tendrás problemas con la caché


Un saludo
Sergio Lizana, modificado 8 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

New Member Postagens: 17 Data de Entrada: 30/11/15 Postagens Recentes
Jorge Díaz:
Buenos días,

Tienes más información en el siguiente enlace: https://dev.liferay.com/develop/learning-paths/mvc/-/knowledge_base/6-2/enabling-search-and-indexing-for-guestbook-entries

Primero tienes que implementar en tu clase OperadorIndexer o MunicipioIndexer los métodos doReindex y doDelete, así como el doReindex a nivel de company para las reindexaciones completas (en el enlace anterior tienes ejemplos o sino te puedes descargar el código de Liferay donde también puedes tomar ejemplos)

Después tienes que añadir las anotaciones de indexación o llamar directamente al API de indexación en los métodos de tu código de Liferay que añaden/modifican/eliminan objetos de tus tablas (en las clases *ServiceImpl), de esta manera se lanza la reindexacion de dichos elementos modificados (ver último apartado del enlace anterior)

Una cosa que tienes que considerar es que aunque los datos estén en una base de datos externa, sólo los debes modificar desde Liferay, ya que de otro modo tendrás problemas:
  • El indexer sólo indexará los cambios realizados desde Liferay
  • Liferay cachea la información consultada a la BBDD y se encarga de limpiar la caché en caso de modificaciones desde el API de Liferay. Si actualizas datos desde fuera, tendrás problemas con la caché


Un saludo


Buenos días Jorge,

Ante todo, muchas gracias por contestar.
He seguido la pagina y estoy en el metodo doDelete me pide un long companyID ¿Es la PK de mi base de datos?, ¿O es el companyID de liferay?

Jorge Díaz:



Después tienes que añadir las anotaciones de indexación o llamar directamente al API de indexación en los métodos de tu código de Liferay que añaden/modifican/eliminan objetos de tus tablas (en las clases *ServiceImpl), de esta manera se lanza la reindexacion de dichos elementos modificados (ver último apartado del enlace anterior)


Cuando dices que se lanza la reindexacion de los elementos modificados te refieres que hasta que no modifique un elemento no se va a indexar en lucene?
Yo lo que necesito es leer una tabla que tiene unos 2000 registros e indexarlos en lucene con una estructura determinada para su busqueda.

Un saludo y gracias por contestar.
thumbnail
Jorge Díaz, modificado 8 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

Liferay Master Postagens: 753 Data de Entrada: 09/01/14 Postagens Recentes
Hola,

El método delete que tienes que implementar es protected void doDelete(Object obj) donde obj es tu objeto a indexar.

Este método tiene que llamar a protected void deleteDocument(long companyId, long field1) heredado de BaseIndexer donde:
- companyId es el id de la company de Liferay donde se encuentra tu objeto
- field1 es la pk de tu objeto
Sergio Lizana, modificado 8 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

New Member Postagens: 17 Data de Entrada: 30/11/15 Postagens Recentes
Jorge Díaz:
Hola,

El método delete que tienes que implementar es protected void doDelete(Object obj) donde obj es tu objeto a indexar.

Este método tiene que llamar a protected void deleteDocument(long companyId, long field1) heredado de BaseIndexer donde:
- companyId es el id de la company de Liferay donde se encuentra tu objeto
- field1 es la pk de tu objeto


Hola Jorge, gracias de nuevo por contestar,

Siguiendo tus pasos mis clases quedan asi:
OperadorIndexerClass




Mi clase de prueba para la indexacion


cuando ejecuto esto

Me sale este error:

com.liferay.portal.kernel.exception.SystemException: org.hibernate.QueryException: could not resolve property: companyId of: com.test.model.impl.OperadorImpl
at com.liferay.portal.service.persistence.impl.BasePersistenceImpl.processException(BasePersistenceImpl.java:251)
at com.liferay.portal.service.persistence.impl.BasePersistenceImpl.findWithDynamicQuery(BasePersistenceImpl.java:144)
at com.liferay.portal.service.persistence.impl.BasePersistenceImpl.countWithDynamicQuery(BasePersistenceImpl.java:105)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:320)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at com.liferay.portal.dao.shard.advice.ShardPersistenceAdvice.invoke(ShardPersistenceAdvice.java:54)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy571.countWithDynamicQuery(Unknown Source)
at com.test.service.base.OperadorLocalServiceBaseImpl.dynamicQueryCount(OperadorLocalServiceBaseImpl.java:208)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:115)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)10:16:10,002 ERROR [http-bio-8080-exec-69][BasePersistenceImpl:244] Caught unexpected exception org.hibernate.QueryException

at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:175)
at com.sun.proxy.$Proxy569.dynamicQueryCount(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.liferay.portal.kernel.dao.orm.BaseActionableDynamicQuery.executeDynamicQuery(BaseActionableDynamicQuery.java:199)
at com.liferay.portal.kernel.dao.orm.BaseActionableDynamicQuery.doPerformCount(BaseActionableDynamicQuery.java:190)
at com.liferay.portal.kernel.dao.orm.BaseActionableDynamicQuery.performActions(BaseActionableDynamicQuery.java:40)
at com.test.OperadorIndexer.reindexEntries(OperadorIndexer.java:136)
at com.test.PruebaIndex.indexar(PruebaIndex.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.liferay.portal.kernel.portlet.LiferayPortlet.callActionMethod(LiferayPortlet.java:148)
at com.liferay.util.bridges.mvc.MVCPortlet.callActionMethod(MVCPortlet.java:247)
at com.liferay.portal.kernel.portlet.LiferayPortlet.processAction(LiferayPortlet.java:78)
at com.liferay.util.bridges.mvc.MVCPortlet.processAction(MVCPortlet.java:210)
at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:71)
at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:48)
at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:112)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:583)
at com.liferay.portlet.InvokerPortletImpl.invokeAction(InvokerPortletImpl.java:628)
at com.liferay.portlet.InvokerPortletImpl.processAction(InvokerPortletImpl.java:308)
at com.liferay.portlet.PortletContainerImpl._doProcessAction(PortletContainerImpl.java:402)
at com.liferay.portlet.PortletContainerImpl.processAction(PortletContainerImpl.java:110)
at com.liferay.portlet.SecurityPortletContainerWrapper.processAction(SecurityPortletContainerWrapper.java:109)
at com.liferay.portlet.RestrictPortletContainerWrapper.processAction(RestrictPortletContainerWrapper.java:75)
at com.liferay.portal.kernel.portlet.PortletContainerUtil.processAction(PortletContainerUtil.java:115)
at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:378)
at com.liferay.portal.action.LayoutAction.doExecute(LayoutAction.java:200)
at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:95)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:179)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:549)
at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:526)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:293)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.jsoncontenttype.JSONContentTypeFilter.processFilter(JSONContentTypeFilter.java:42)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at com.liferay.portal.servlet.FriendlyURLServlet.service(FriendlyURLServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.java:360)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.gzip.GZipFilter.processFilter(GZipFilter.java:123)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:293)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.i18n.I18nFilter.processFilter(I18nFilter.java:243)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.jsoncontenttype.JSONContentTypeFilter.processFilter(JSONContentTypeFilter.java:42)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.autologin.AutoLoginFilter.processFilter(AutoLoginFilter.java:267)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.sso.ntlm.NtlmPostFilter.processFilter(NtlmPostFilter.java:83)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.sharepoint.SharepointFilter.processFilter(SharepointFilter.java:88)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:169)
at com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.processFilter(VirtualHostFilter.java:226)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:185)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
at com.liferay.portal.servlet.filters.urlrewrite.UrlRewriteFilter.processFilter(UrlRewriteFilter.java:57)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:59)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:204)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:109)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:165)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:165)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:185)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.hibernate.QueryException: could not resolve property: companyId of: com.test.model.impl.OperadorImpl
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75)
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1482)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:62)
at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1457)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:483)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.findColumns(CriteriaQueryTranslator.java:498)
at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:68)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:380)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:102)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:92)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1697)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at com.liferay.portal.dao.orm.hibernate.DynamicQueryImpl.list(DynamicQueryImpl.java:94)
at com.liferay.portal.dao.orm.hibernate.DynamicQueryImpl.list(DynamicQueryImpl.java:88)
at com.liferay.portal.service.persistence.impl.BasePersistenceImpl.findWithDynamicQuery(BasePersistenceImpl.java:141)
... 192 more


¿Tengo que indexar los datos de alguna otra forma?

Me sale el mismo error cuando le doy a regenerar los indices de búsqueda, sin usar el método mencionado arriba.

Un saludo de nuevo y gracias por la ayuda.
thumbnail
Jorge Díaz, modificado 8 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

Liferay Master Postagens: 753 Data de Entrada: 09/01/14 Postagens Recentes
Antes de nada el método protected void doReindex(String[] ids) es el que usa Liferay para hacer la reindexación completa de una company, es decir, desde el Panel de control al pulsar reindexar, es el método que se utiliza, por lo que no tiene sentido que lo utilices tu desde tu portlet.

Es decir, tienes que implementar tu código de la siguiente manera:
- doDelete(obj) => borra del indice el objeto borrado pasado por parametro
- doReindex(obj) y doReindex(className, PK) => reindexa el objeto creado o modificado que se pasa por parametro (ya sea el obj o su pk)
- doReindex(String[] id) => utilizado por Liferay para reindexar todos los objetos de una company concreta, debes implementar un código que recupere todos tus objetos (filtrando por company) y los reindexe.

E invocar al doDelete(obj) y doReindex(obj) / doReindex(className, PK) desde la capa de servicio *ServiceImpl cuando se añada/modifique/elimine una entrada de tus objetos
El doReindex(String[] id) lo usará Liferay cuando ejecutes la reindexación desde el panel de control por lo que no es necesario que lo utilices.

Respecto al error de tu código, el problema es que en reindexEntries(long company) estás utilizando una actionable dynamic query que está filtrando por el atributo companyId pero tu objeto no dispone de dicha información.
Por tanto o bien reescribe tu código para que no filtre por dicho campo o bien añade dicha atributo si te hace falta.

Un saludo
Sergio Lizana, modificado 8 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

New Member Postagens: 17 Data de Entrada: 30/11/15 Postagens Recentes
Jorge Díaz:
Antes de nada el método protected void doReindex(String[] ids) es el que usa Liferay para hacer la reindexación completa de una company, es decir, desde el Panel de control al pulsar reindexar, es el método que se utiliza, por lo que no tiene sentido que lo utilices tu desde tu portlet.

Es decir, tienes que implementar tu código de la siguiente manera:
- doDelete(obj) => borra del indice el objeto borrado pasado por parametro
- doReindex(obj) y doReindex(className, PK) => reindexa el objeto creado o modificado que se pasa por parametro (ya sea el obj o su pk)
- doReindex(String[] id) => utilizado por Liferay para reindexar todos los objetos de una company concreta, debes implementar un código que recupere todos tus objetos (filtrando por company) y los reindexe.

E invocar al doDelete(obj) y doReindex(obj) / doReindex(className, PK) desde la capa de servicio *ServiceImpl cuando se añada/modifique/elimine una entrada de tus objetos
El doReindex(String[] id) lo usará Liferay cuando ejecutes la reindexación desde el panel de control por lo que no es necesario que lo utilices.

Respecto al error de tu código, el problema es que en reindexEntries(long company) estás utilizando una actionable dynamic query que está filtrando por el atributo companyId pero tu objeto no dispone de dicha información.
Por tanto o bien reescribe tu código para que no filtre por dicho campo o bien añade dicha atributo si te hace falta.

Un saludo


Hola Jorge, Buenos días,

El problema principal que tengo es el companyID ese que hablábamos antes, en todos los ejemplos que he visto y en la documentación que me pasaste, en el fichero service xml está el campo companyID y yo no lo tengo, dado que mi tabla no tiene ese campo, la forma en la que saco el companyID es


Company company = CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID));
company.getCompanyID


Entonces llegados a este punto, ¿como puedo filtrar datos de mi base de datos externa por companyID si esta no tiene companyID?

Un saludo Jorge
thumbnail
Jorge Díaz, modificado 8 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

Liferay Master Postagens: 753 Data de Entrada: 09/01/14 Postagens Recentes
Para cuando llamas al indice o a otros métodos, me ha parecido ingeniosa la solución de obtener la Company por defecto y utilizar su companyId.
Si sólo utilizáis una instancia (=company), no debería dar problemas, pero si tienes más de una, ten cuidado.

Respecto a tu función reindexEntries, en efecto, el problema es que en el actionabledynamicquery se está filtrando por el campo companyId que no tienes en la tabla.
Si no puedes añadirlo a la tabla de BBDD, se me ocurre que primero intentes quitar el setCompanyId por si así se elimina el filtro de la consulta interna de hibernate.

Si sigue fallando, eso es que no puedes usar actionabledynamicquery con objetos sin companyId porque internamente usará ese identificador para algo.
Prueba en su lugar a utilizar una Dynamic Query normal y para cada objeto obtenido, invoca a tu doReindex(object)

Más info sobre dynamic Query:
https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/leveraging-hibernates-criteria-api
En esa página puedes ver el ejemplo:
DynamicQuery entryQuery = DynamicQueryFactoryUtil.forClass(Entry.class);
List<event> entries = EventLocalServiceUtil.dynamicQuery(entryQuery);</event>


Si no le pones criterias, te devuelve todos los registros
Sergio Lizana, modificado 8 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

New Member Postagens: 17 Data de Entrada: 30/11/15 Postagens Recentes
Jorge Díaz:
Para cuando llamas al indice o a otros métodos, me ha parecido ingeniosa la solución de obtener la Company por defecto y utilizar su companyId.
Si sólo utilizáis una instancia (=company), no debería dar problemas, pero si tienes más de una, ten cuidado.

Respecto a tu función reindexEntries, en efecto, el problema es que en el actionabledynamicquery se está filtrando por el campo companyId que no tienes en la tabla.
Si no puedes añadirlo a la tabla de BBDD, se me ocurre que primero intentes quitar el setCompanyId por si así se elimina el filtro de la consulta interna de hibernate.

Si sigue fallando, eso es que no puedes usar actionabledynamicquery con objetos sin companyId porque internamente usará ese identificador para algo.
Prueba en su lugar a utilizar una Dynamic Query normal y para cada objeto obtenido, invoca a tu doReindex(object)

Más info sobre dynamic Query:
https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/leveraging-hibernates-criteria-api
En esa página puedes ver el ejemplo:
DynamicQuery entryQuery = DynamicQueryFactoryUtil.forClass(Entry.class);
List<event> entries = EventLocalServiceUtil.dynamicQuery(entryQuery);</event>


Si no le pones criterias, te devuelve todos los registros


Hola Jorge,

Por fin funcionó con una dinamicQuery, ahora los datos me los indexa correctamente en el indice.
El siguiente paso sería configurar el buscador para buscar por ese campo, en la documentación que me mandaste, explica como configurar ese portlet?

Un saludo y gracias por la ayuda.
Juan Espinoza Valera, modificado 5 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

New Member Postagens: 11 Data de Entrada: 12/09/12 Postagens Recentes
Buenas tardes

En este momento tenemos un desarrollo en Liferay 7.1 asi como Lioferay 6.2.x

El dilema es usar una base de datos externas con varias tablas y revisando lo que han descrito es justo lo que estoy buscando. 

La pagina en que indican que exite la información correspondiente ya no esta activa https://dev.liferay.com/develop/learning-paths/mvc/-/knowledge_base/6-2/enabling-search-and-indexing-for-guestbook-entries, tal como jorge diaz lo menciono

Estimado Jorge Lizana, me encuentro en el mismo caso que tu en su debido momento reportastes. me podrias dar información al respecto

Por otro lado tengo la carpeta data de liferay en un servidor distinto y configurado en el portal-ext.properties, desearia saber si en caso de subir archivos, estos se podran indexar automaticamente o tambien hay que realizar algun procedimiento

Agradeciendole la ayuda

Atentamente,

Juan Carlos Espinoza Valera
Lima .Perú
thumbnail
Jorge Díaz, modificado 5 Anos atrás.

RE: Indexar Datos de una base de datos Externa en Lucene.

Liferay Master Postagens: 753 Data de Entrada: 09/01/14 Postagens Recentes