• Error en el Lucene Index

  • OpenKM tiene muchas características interesantes, pero es necesario un proceso de configuración para mostrar todo su potencial.
OpenKM tiene muchas características interesantes, pero es necesario un proceso de configuración para mostrar todo su potencial.
Forum rules: Por favor, antes de preguntar algo consulta el wiki de documentación o utiliza la función de búsqueda del foro. Recuerda que no tenemos una bola de cristal ni poderes mentales, o sea que que para informar sobre un error es necesario que nos indiques tanto la versión de OpenKM que usas como la del navegador y sistema operativo. Para más información consulta Cómo informar de fallos de forma efectiva.
 #49434  by afumega
 
Buenas tardes,

Nuestro Gestor Documental Openkm nos devolvía el siguiente error en el Lucene Index y lo solventamos elmininando la carpeta opt/openkm63/repository/index/ y regenerando los índices desde la consola de administración.
Code: Select all
com.openkm.sdk4j.exception.UnknowException:  Unable to query Lucene index
at com.openkm.sdk4j.impl.SearchImpl.find(SearchImpl.java:283)
at com.openkm.sdk4j.OKMWebservice20.find(OKMWebservice20.java:1154
)

Tras solventar el problema, hemos vuelto a tener el mismo error en menos de 24 horas sin tener un gran volumen de carga de documentos (50 documentos como máximo).

¿A qué se puede deber este error? ¿Se puede desactivar esa indexación?

Muchas gracias!
 #49446  by jllort
 
Veo que estas utilizando el API de OpenKM. En este caso sería más interesante reproducir el mismo tipo de consulta desde la interfaz de OpenKM directamente para tener una mejor traza de el error.

Estas ejecutando la aplicación en windows o linux?
La carpeta repository la tienes en un disco físico verdad?

En el caso de que estes en linux, asegúrate que estas ejecutando la aplicación siempre con el mismo usuario ( a veces los usuarios arrancan esporádicamente con el usuario root y esto hace que los ficheros que se crean nuevos se creen con este usuario y luego al volver a el usuario standard surgen problemas, porque no pueden acceder a los ficheros creados por el usuario root.

Necesitamos ver una traza más larga, por eso te sugiero de generar el error desde el interfaz clásico de OpenKM para tener más claro que puede estar sucediendo ( no es para nada normal ).
 #49527  by afumega
 
Hola,

Antes de nada, gracias por responder.

La aplicación está sobre Linux y guarda en disco, así es.
El usuario es el mismo en todo momento, hemos podido comprobarlo.

Por otro lado, adjunto la traza completa (es de log y no de la interfaz porque tras reindexar por segunda vez ya no se ha vuelto a reproducir):

Code: Select all
ERROR 1 --- [nio-8888-exec-7] e.d.o.document.services.OpenkmService:

com.openkm.sdk4j.exception.UnknowException:  Unable to query Lucene index
at com.openkm.sdk4j.impl.SearchImpl.find(SearchImpl.java:283)
at com.openkm.sdk4j.OKMWebservice20.find(OKMWebservice20.java:1154)
at es.xxx.yyyy.document.services.OpenkmService.queryDocuments(OpenkmService.java:685)
at es.xxx.yyyy.document.services.OpenkmService.asociarDocumentacionEntreOperacion(OpenkmService.java:1024)
at es.xxx.yyyy.services.OperacionService.crearNuevaRelacion(OperacionService.java:920)
at es.xxx.yyyy.services.OperacionService$$FastClassBySpringCGLIB$$f76a0c18.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at es.xxx.yyyy.services.OperacionService$$EnhancerBySpringCGLIB$$993c4b1b.crearNuevaRelacion(<generated>)
at es.xxx.yyyy.controllers.OperacionController.crearNuevaRelacion(OperacionController.java:332)
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:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:142)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:901)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.keycloak.adapters.tomcat.AbstractAuthenticatedActionsValve.invoke(AbstractAuthenticatedActionsValve.java:67)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:607)
at org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.invoke(AbstractKeycloakAuthenticatorValve.java:181)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Muchas gracias de antemano.
Saludos.
 #49542  by jllort
 
El buscador te funciona desde la interfaz de openkm?
Puedes compartir la traza de el servidor, catalina.log?
 #49568  by afumega
 
Hola,

El buscador funciona cuando borramos la carpeta "index" y reiniciamos el OpenKM, sino no.
El log de catalina no te lo puedo enviar, ya que no lo tenemos con el error.

Por otro lado, ¿sería posible apagar la indexación? realmente no es necesario. Hemos visto varias propiedades pero no sigue realizando la indexación de los documentos:
Code: Select all
- 2020-01-23 14:33:24,174 [localhost-startStop-1] [] INFO  com.openkm.core.Config - LOAD - hibernate.search.index.exclusive=true
No vemos esta propiedad en el OpenKM.cfg pero, ¿valdría ponerla a false para desactivar la indexación?

Tras 1 semana y media trabajando, nos ha vuelto a dar problemas de indexación y hemos tenido que borrarlos y reconstruirlos, no parece algo normal entiendo para un volumen de unos 2000 documentos.

Muchas gracias de antemano,
Saludos.
 #49572  by jllort
 
El indice de el lucene no se corrompe por si solo. O bien estais apagando incorrectamente el equipo ( y eso puede dañar el indice si esta transaccionando ) o bien teneis problemas con el disco ( posible aunque también daría otras señales de alarma ) o estais haciendo alguna cosa que no estais olvidando de decir.

Sobre la indexación si la desactivais, el buscador dejará de funcionar completamente. Otra historia es que no querais indexar por el contenido ( que esto se puede hacer de varias maneras, lo mas fácil es parar la tarea de la cola de indexación en el crontab ).

En la version professional tenemos una opción para parar el servicio de indexación totalmente ( "hibernate.search=off" ) pero esto he comprobado que no lo tenemos disponible en la version community. El parámetro hibernate.search.index.exclusive realiza otra función y con eso no vas a desactivar nada.

Efectivamente 2K ficheros es un repositorio muy pequeño, nosotros hasta los 500K - 1 millon no consideramos que sea un repositorio mediano - grande, con estos volumenes que manejas no deberías tener absolutamente ningún problema.
 #49573  by afumega
 
Hola,

¿A qué te refieres con "el buscador deja de funcionar"?
- Es decir, ¿el buscador de la consola de administración?
- Por otro lado, ¿se podrían realizar búsquedas a través del API con la indexación desactivada?

En nuestro caso, la instalación se encuentra en un docker sobre Openshift, entiendo que no debería afectar en nada. No es un equipo que se reinicie continuamente y, a priori, el disco está correcto ya que no se han detectado problemas en él.

Por último, ¿es posible que el nombre de los documentos afecte a la indexación? Por longitud muy grande o caracteres no habituales, etc.

Muchas gracias nuevamente!
Saludos.
 #49588  by jllort
 
Me referia a que si "deshabilitas la indexación totalmente" el buscador te devolverá siempre 0 resultados. Otra cosa es que "desactives sólamente la indexación por contenido" -> entonces no te localizará por contenido pero el resto te funcionará ( para hacer esto se tiene que parar la tarea de crontab que se llama "Text Extractor worker" )

Relativo a la codificación de carácteres como origen de el problema, te diría que sería la primera noticia a este respecto en los últimos 12 años, mi impresión es que ese no creo que sea el origen ( gestionamos documentos en árabe, chino, ruso, japones, y cosas más raras -> por ahi han surgido problemas de que no indexaba pero no errores del tipo que se mostraba en la consola ).

Observo que estais utilizando el API para las consultas, sería interesante poder ver una consulta que este dando problemas, me refiero a la parte de el codigo y los valores que se estan utilizando ( porque igual os estais dejando algun parametro y de el lado de el servidor no le motiva ).

Otra história es que se haya modificado algo de la configuración por defecto y eso ya es más complicado de localizar.
 #49590  by afumega
 
Hola,

Antes de nada, gracias por contestar.

Respecto al buscador, si desactivamos totalmente la indexación, ¿tampoco recupera por API? La búsqueda por consola realmente no la utilizamos o, al menos, no es tan prioritario que funcione correctamente la búsqueda. Probaremos, en cualquier caso, la indexación de contenido tal y como comentas.

En cuanto a la configuración de la herramienta es la de por defecto, tan solo hemos añadido metadatos personalizados para identificar los documentos.

El código utilizamos es como el siguiente:
Code: Select all
//Realizamos la búsqueda de documentos a partir de los metados personalizados que hemos creado en OpenKM:
Map<String, String> properties = //contiene clave-valor de los metadatos personalizados que hemos creado para las búsquedas.
List<Document> documentos = new ArrayList<>();
QueryParams params = new QueryParams();
params.setProperties(properties);
List<QueryResult> results = okm.find(params);
if (results != null) {
	for (QueryResult result : results) {
		documentos.add(okm.getDocumentProperties(result.getNode().getUuid()));
	}
}

...
...

//Recuperamos el uuid de cada documento para recuperarlo:
OKMWebservices okm = OKMWebservicesFactory.newInstance(url, user, pwd);
String rutaDocumento = okm.getDocumentPath(uuid);
InputStream inputStream = okm.getContent(rutaDocumento);
Muchas gracias.
Saludos.
 #49598  by jllort
 
Por si las moscas pondría el domain
Code: Select all
params.setDomain(QueryParams.DOCUMENT); // aunque el API lo hace por defecto nunca viene mal asegurarse desde la consulta
Sobre el getContent, ahora no estoy 100% seguro pero creo que con el UUID tambien te devuelve el documento, que no te hace falta convertir el uuid a path.
Code: Select all
okm.getContent(uuid); // 
Si el error se vuelve a producir intenta realizar la misma consulta desde el UI ( también debería arrojar el mismo error ) y entonces si que necesitaríamos pegar-le un ojo al tipo de consulta con todos los valores ... porque alguna cosa tendrá que se nos escapa.
 #49912  by afumega
 
Hola de nuevo,

Aplicamos lo que comentaste en el post anterior pero tras 3 meses funcionando correctamente ha vuelto pasar nuevamente el error del índices, además esta vez, tras regenerarlo nuevamente el jueves pasado, hoy ha vuelto a suceder el mismo problema sin que se haya realizado ningún reinicio ni parada forzosa del sistema.

A continuación se adjuntan los ficheros de logs del servidor de OpenKM por si ayuda:
(213.48 KiB) Downloaded 367 times

Muchas gracias de antemano.
Saludos.
 #49928  by jllort
 
Intenta pasar un proceso para verificar la salud de el disco duro. No le veo otra explicacion y desgraciadamente tendras que volver a reindexar.

Que volumen de ficheros tienes ?

About Us

OpenKM is part of the management software. A management software is a program that facilitates the accomplishment of administrative tasks. OpenKM is a document management system that allows you to manage business content and workflow in a more efficient way. Document managers guarantee data protection by establishing information security for business content.