2016-05-11 7 views
0

Ich versuche, einen Index in meinem Projekt zu suchen. Wenn ich die Suche mit dem
search: Semester: "S1/2016" und Status: Validated UND emp_id> 0 , ich die Ergebnisse richtig zu bekommen.GoogleAppEngine: GenericScorer.search wirft NegativeArraySizeException

Wenn ich die Suche mit dem
search: Semester: "S1/2016" und Status: Validated UND emp_id> 500, erhalte ich die unten Ausnahme

java.lang.NegativeArraySizeException 
    at com.google.appengine.api.search.dev.GenericScorer.search(GenericScorer.java:196) 
    at com.google.appengine.api.search.dev.LocalSearchService.searchForApp(LocalSearchService.java:584) 
    at com.google.appengine.api.search.dev.LocalSearchService.search(LocalSearchService.java:534) 
    at sun.reflect.GeneratedMethodAccessor93.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.callInternal(ApiProxyLocalImpl.java:541) 
    at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:484) 
    at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:461) 
    at java.util.concurrent.Executors$PrivilegedCallable$1.run(Executors.java:493) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.util.concurrent.Executors$PrivilegedCallable.call(Executors.java:490) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

Unten ist mein Code wo die Suche durchgeführt wird:

public Results<ScoredDocument> retrieveDocuments(String searchText) { 
    if (searchText.length() > 2000) { 
     throw new InternalException(new Exception("Error - Too long query !!"), 
     BaseValidationMessages.SEARCH_STRING_EXCEEDS_LIMIT); 
    } 
    QueryOptions options =QueryOptions.newBuilder().setOffset(0).setLimit(2) 
             .setSortOptions(createSortOptions("emp_id", "asc")).build(); 
    Query query = Query.newBuilder().setOptions(options).build(searchText); 
    IndexSpec indexSpec = IndexSpec.newBuilder().setName("Beneficiaries").build(); 
    Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec); 
    return index.search(query); 
} 
+0

Können Sie diesen Fehler immer noch auslösen? Im Allgemeinen gibt eine NegativeArraySizeException im Bibliothekscode (wie GenericScorer) einen Integer-Überlauf-Fehler an. Ich würde vorschlagen, einen Fehler mit der GAE-Bibliothek einzureichen, wenn Sie ihn noch replizieren können. – dimo414

Antwort

0

Google App Engine Negative wirft, wenn der übergebene Offset der Indexsuche ist o ut Bereich der verfügbaren Ergebnisse zählen.

Betrachten Sie z. B. 50 Dokumente, die im Suchindex für den angegebenen Suchabfragetext verfügbar sind. Wenn der in den Suchabfrageoptionen festgelegte Offset mehr als 50 beträgt, würde NegativeArraySizeException beim Ausführen der Suche ausgelöst.

Bevor Sie den Offset einstellen, stellen Sie sicher, dass die Dokumente für den Offset verfügbar sind und die vorherigen Ergebnisse verwendet werden.

Erste Frage:

QueryOptions options = QueryOptions.newBuilder().setOffset(0).setLimit(50); 
IndexSpec indexSpec = IndexSpec.newBuilder().setName("Beneficiaries").build(); 
Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec); 
Results<ScoredDocument>results = index.search(query); 

Wenn die Ergebnisse aus der obigen Abfrage zurückgegeben werden, sind gleich 50, dann die Suche nach dem nächsten Satz;

QueryOptions options = QueryOptions.newBuilder().setOffset(**51**) 

wenn die zurückgegebenen Ergebnisse weniger als 50, dann können wir davon ausgehen, dass, gibt es keine weiteren Ergebnisse für die Offset> 50 zur Suche zur Verfügung, dann können wir weiter die Suche stoppen.

Verwandte Themen