java GoogleAppEngine:GenericScorer。搜索抛出NegativeArraySizeException
我正在尝试在我的项目中搜索索引。
当我用
searchText:学期:“S1/2016”和状态:已验证和emp_id>;0
,我得到了正确的结果
当我用
searchText:学期:“S1/2016”和状态:已验证和emp_id>;500,我得到了以下例外
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)
下面是我执行搜索的代码:
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);
}
# 1 楼答案
如果传递给索引搜索的偏移量超出可用结果计数的范围,Google Appengine将抛出NegativeArraySizeException
例如,对于给定的搜索查询文本,考虑到在搜索索引中有50个文档可用,如果搜索查询选项中的偏移集大于50,那么它将在执行搜索时抛出否定的RaysiResiZeExpRebug。p>因此,在设置偏移量之前,请确保可以使用之前的结果对文档进行偏移
第一个问题:
如果上述查询返回的结果等于50,则搜索下一个集合
如果返回的结果小于50,那么我们可以假设,没有更多的结果可用于搜索偏移量>;50,那么我们就可以停止进一步的搜索了