cotas na API de pesquisa do appengine para java
Estou testando a nova API de pesquisa do mecanismo de aplicativos para java e tenho o seguinte código que tenta adicionar ~ 3000 documentos em um índice:
<code>List<Document> documents = new ArrayList<Document>(); for (FacebookAlbum album: user.listAllAlbums()) { Document doc = Document.newBuilder() .setId(album.getId()) .addField(Field.newBuilder().setName("name").setText(album.getFullName())) .addField(Field.newBuilder().setName("albumId").setText(album.getAlbumId())) .addField(Field.newBuilder().setName("createdTime").setDate(Field.date(album.getCreatedTime()))) .addField(Field.newBuilder().setName("updatedTime").setDate(Field.date(album.getUpdatedTime()))) .build(); documents.add(doc); } try { // Add all the documents. getIndex(facebookId).add(documents); } catch (AddException e) { if (StatusCode.TRANSIENT_ERROR.equals(e.getOperationResult().getCode())) { // retry adding document } } </code>
No entanto, estou recebendo a seguinte exceção:
<code>Uncaught exception from servlet java.lang.IllegalArgumentException: number of documents, 3433, exceeds maximum 200 at com.google.appengine.api.search.IndexImpl.addAsync(IndexImpl.java:196) at com.google.appengine.api.search.IndexImpl.add(IndexImpl.java:380) at photomemories.buildIndexServlet.doGet(buildIndexServlet.java:47) </code>
Existe uma cota no número de documentos que posso inserir com uma chamada de adição definida como 200?
Se eu tentar inserir um documento de cada vez no índice com o seguinte código:
<code> for (FacebookAlbum album: user.listAllAlbums()) { Document doc = Document.newBuilder() .setId(album.getId()) .addField(Field.newBuilder().setName("name").setText(album.getFullName())) .addField(Field.newBuilder().setName("albumId").setText(album.getAlbumId())) .addField(Field.newBuilder().setName("createdTime").setDate(Field.date(album.getCreatedTime()))) .addField(Field.newBuilder().setName("updatedTime").setDate(Field.date(album.getUpdatedTime()))) .build(); try { // Add the document. getIndex(facebookId).add(doc); } catch (AddException e) { if (StatusCode.TRANSIENT_ERROR.equals(e.getOperationResult().getCode())) { // retry adding document } } } </code>
Eu estou recebendo a seguinte exceção:
<code>com.google.apphosting.api.ApiProxy$OverQuotaException: The API call search.IndexDocument() required more quota than is available. at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.success(ApiProxyImpl.java:479) at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.success(ApiProxyImpl.java:382) at com.google.net.rpc3.client.RpcStub$RpcCallbackDispatcher$1.runInContext(RpcStub.java:786) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455) </code>
Achei que a cota nas chamadas da api era 20k / dia (veja aqui:https://developers.google.com/appengine/docs/java/search/overview#Quotas).
Alguma idéia do que está acontecendo?