AnsweredAssumed Answered

Web Service : requête lucene Limitée à 1000 résultats

Question asked by laurentprad on Sep 26, 2008
Latest reply on Nov 20, 2008 by wadael
Je développe un petit programme d'export Alfresco qui recherche des documents et crée un fichier csv avec les méta-données des documents.
Pour éliminer les différents timeout Alfresco, JBoss et Axis je modifie (temporairement) les fichiers :
+ custom-repository.properties : system.acl.maxPermissionCheckTimeMillis=2000000 ; system.acl.maxPermissionChecks=200000 ; lucene.query.maxClauses=2000000 ; lucene.maxAtomicTransformationTime=4000 ; lucene.write.lock.timeout=2000000 ; lucene.commit.lock.timeout= 20000000
+ jboss-service.xml : <attribute name="SocketTimeout">6000000</attribute>
+ server.xml : <Connector port="8080" address="${jboss.bind.address}" maxThreads="250" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="2000000" disableUploadTimeout="true"/>
+ Et le timeout Axis dans le code : repositoryService.setTimeout(timeout); (private static final int timeout = 50000000; )

Maintenant, il n'y a plus d'erreur mais le CSV généré ne contient que 1000 lignes (alors qu'il il y a 40 000 documents dans la base).
Voici le code source utilisé :

FileCSV myCSV = new FileCSV (export.getDestinationFile());
Query query = new Query(Constants.QUERY_LANG_LUCENE, requete);                              
QueryResult result = getRepositoryService().query(store, query, true);

if (result != null && result.getResultSet() != null) {              
   ResultSetRow[] rows = result.getResultSet().getRows();              
   if (rows == null ||  rows.length == 0) {
      System.out.println("AUCUN document trouvé par la requete !!");
      myCSV.close();
      return;
   } else
      System.out.println("Nombre de documents trouvés par la requete : " + String.valueOf(rows.length));
   
   // Pour chaque resultat = node
   for (int i = 0; i < rows.length ; ++i) {
      NamedValue[] props = rows[i].getColumns();
      List<Column> columns = export.getColumns();


J'aurais bien voulu utiliser "LimitBy limitBy = resultSet.getResultSetMetaData().getLimitedBy();" (http://forums.alfresco.com/en/viewtopic.php?f=6&t=13381) mais visiblement, cette méthode n'est utilisable que pour les API et pas les Web services.
Merci par avance si quelqu'un a une solution.

Outcomes