SearchParameters Alfresco

cancel
Showing results for 
Search instead for 
Did you mean: 
dewil
Member II

SearchParameters Alfresco

Buenas a todos.

Soy novato en esto de Alfresco y he estado mirando las distintas formas de realizar búsquedas en Alfresco ("WebService", "Web Scripts", …), y me interesa especialmente una de ellas. Corregidme si me equivoco, pero he visto en la WIKI que utilizando "org.alfresco.service.cmr.search.SearchParameters" junto con "SearchService" puedo hacer:

s.setLimitBy(LimitBy.FINAL_SIZE);//Limitar
s.setLimit(1000);

¿ Esto Permite limitar las filas de resultados antes de realizar la query ?

Estoy utilizando "Alfresco 1.4" y tengo de momento montado un WebService Client. Cuando desde el WebService Client realizo búsquedas que devuelven más de 1000 resultados de respuesta, el tiempo de respuesta cuando hago "repoWs.query(alfSession.getDefaultStore(), query, true);" se desborda, por lo que quiero limitar antes de realizar la query los resultados que voy a recoger.

¿El uso de "org.alfresco.service.cmr.search.SearchParameters" se puede implementar solo en WebScripts?

Gracias por adelantado.
7 Replies
pjcaracuel_2349
Active Member II

Re: SearchParameters Alfresco

Hola,

Yo de la 1.4 no controlo mucho puesto que llegue al mundo alfresco con la version 2.

Pero el uso de webscript esta a partir de la 2.1

Saludos
dewil
Member II

Re: SearchParameters Alfresco

Muchas gracias por la respuesta.

En primer lugar se me plantea entonces una pregunta, ¿Puedo limitar de alguna forma el número máximo de respuestas que voy a dejar procesar en la query? (No me refiero a recorrer del ResultSet, sino a la query).

El problema que tengo es que en las pruebas que he realizado tanto por "WebService" como por el "Node Browser de Alfresco", si buscamos por ejemplo directamente: @TEXT\:"loquesea", si esto devolviera 150 resultados (por ejemplo) funciona perfectamente, pero si buscamos @TEXT\:"loquesea2", y esto evolviera 1.500 resultados entonces sí que se hace todo muy intratable. Afinando más en este sentido, el problema (probando ya en el WebService) no se produce al tratar el ResultSet de respuesta, sino al realizar la ejecución de la query ("QueryResult qres = repoWs.query(alfSession.getDefaultStore(), query, true);").
pjcaracuel_2349
Active Member II

Re: SearchParameters Alfresco

Yo en temas de programacion no ando muy suelto, quizas hayas visto este post donde tratan un tema parecido al tuyo.
http://forums.alfresco.com/en/viewtopic.php?f=4&t=22178

Saludos
dewil
Member II

Re: SearchParameters Alfresco

Muchas gracias otra vez.

El post que me has enviado lo he visitado un par de veces, de hecho fue de las primeras cosas que intenté… Leyendo el post puse lo siguiente para que me saltara de inmediato:


I tried changing these parameters in the repository.properties file
# The maximum time spent pruning results
system.acl.maxPermissionCheckTimeMillis=1000
# The maximum number of results to perform permission checks against
system.acl.maxPermissionChecks=100

Sin embargo, cuando desde el WebService Client llamo a la Query:

repoWs.query(alfSession.getDefaultStore(), query, true);

Saltaba al minuto y poco la Excepción con el TIME OUT de la conexión (aunque en la BD se seguía procesando la SQL durante 40 min más).

¿Puede ser que esto no se puede utilizar para la version 1.4 de Alfresco? ¿O que parametros hay que ajustar en el "repository.properties" para que cuando ejecute una Query se procesen solo los primeros 100 resultados para la version 1.4 de Alfresco? ¿Es posible realizar esto que estoy comentando?

Como siempre, muchisimas gracias por la ayuda que me estan dando.
dewil
Member II

Re: SearchParameters Alfresco

Leyendo la WIKI (http://wiki.alfresco.com/wiki/Release_1.4#Release_1.4) me he encontrado con lo siguiente !!!:

[size=150]Known Issues [/size]

Community Release Candidate
OpenOffice connection logs disconnection, but automatically reconnects
Using a person selector causes error when no users other than Admin.

Enterprise Release
Client search results are limited to prevent excessive resources being used on individual queries. The defaults are set low.
system.acl.maxPermissionCheckTimeMillis=10000
system.acl.maxPermissionChecks=1000


Estoy trabajando con la versión "Community Network - v1.4.0", voy a preguntar una bobada pero tengo que asegurarme totalmente ¿con esta version no me funcionan esos parametros para limitar los resultados de las querys? ¿Esto funciona ya en todas las versiones a partir de la 2?

Como siempre muchas gracias.
venzia
Senior Member

Re: SearchParameters Alfresco

Se refiere al release de la version Enterprise .. no al de las versiones Community (que es tu caso).
Es decir .. no limita el uso de dichas propiedades.
Echale un vistazo a este post a ver si te da ideas http://forums.alfresco.com/es/viewtopic.php?f=11&t=462&hilit=paginado&start=10
Saludos,
dewil
Member II

Re: SearchParameters Alfresco

Buenas a todos.

Gracias en primer lugar por aclararme lo de las versiones, aunque ¿entonces no me funciona correctamente esa configuración o estoy creyendo utilizarlo para algo que no funciona exactamente así?

Por otra parte creo recordar que le heché un vistazo al POST que me recomiendas (lo he vuelto a leer entero) y realicé lo siguiente en mi WebService Cilent:

// establecemos el tamaño del fetchSize en el elemento Query Header
int Tamanno = 10;
QueryConfiguration queryCfg = new QueryConfiguration();
queryCfg.setFetchSize(Tamanno);
//Insertamos Query Header en cabecera SOAP
RepositoryServiceSoapBindingStub repositoryService = WebServiceFactory.getRepositoryService();
repositoryService.setHeader(new RepositoryServiceLocator().
               GetServiceName().
               getNamespaceURI(),
               "QueryHeader",
               queryCfg);
//recogemos los primeros resultados
QueryResult resultado = repositoryService.query(STORE, getQuery(sConsulta), true);
//procesamos el primer resultado
String querySession = resultado.getQuerySession();
while (querySession != null) {
   // recogemos los siguientes conjunto de resultados
   resultado = repositoryService.fetchMore(querySession);
   // procesamos los siguientes conjuntos de resultados.
   querySession = resultado.getQuerySession();
}

El problema es que al realizar una query que devolvía unos 10.000 resultados (que segun lo quiero recoger de 10 en 10 por ejemplo):
@cm\:creator:"admin"
se queda pillado en la parte
QueryResult resultado = repositoryService.query(STORE, getQuery(sConsulta), true);
saltando el TIME OUT antes que devuelva nada.  Mirando en la BD Oracle 9i se queda la SQL procesandose y la resuelve a los 45 minutos. Corregidme si me equivoco, pero entendí que  con esto se pararía el proceso de busqueda una vez encontrado los "X" resultados que yo quiero, sin embargo, por lo que veo parece que me intenta ejecutar la consulta completa para luego traerme solo los resultados "X" que yo quiero.

¿Estoy en lo cierto? ¿Es raro lo que me pasa?