in java/core/src/main/java/com/aliyun/openservices/tablestore/agent/memory/MemoryStoreImpl.java [742:779]
public Response<Message> searchMessages(MemorySearchRequest searchRequest) {
if (log.isDebugEnabled()) {
log.debug("before search messages:{}", searchRequest);
}
ValidationUtils.ensureNotNull(searchRequest, "MemorySearchRequest");
Query query = TablestoreHelper.parserSearchFilters(searchRequest.getMetadataFilter());
Sort otsSort = TablestoreHelper.toOtsSort(searchRequest.getSorts());
byte[] nextToken = null;
if (searchRequest.getNextToken() != null) {
nextToken = Base64.getDecoder().decode(searchRequest.getNextToken());
}
SearchQuery searchQuery = SearchQuery.newBuilder()
.query(query)
.getTotalCount(false)
.limit(searchRequest.getLimit())
.offset(0)
.sort(otsSort)
.token(nextToken)
.build();
SearchRequest otsSearchRequest = SearchRequest.newBuilder()
.tableName(messageTableName)
.indexName(messageSearchIndexName)
.searchQuery(searchQuery)
.returnAllColumns(true)
.build();
try {
SearchResponse searchResponse = client.search(otsSearchRequest);
log.info("search messages:{}, request_id:{}", searchRequest, searchResponse.getRequestId());
Triple<List<Message>, String, List<Double>> triple = TablestoreHelper.parserSearchResponse(searchResponse, TablestoreHelper::rowToMessage);
List<Message> messages = triple.getLeft();
String nextTokenStr = triple.getMiddle();
return new Response<>(messages, nextTokenStr);
} catch (TableStoreException e) {
throw Exceptions.runtimeThrowable(String.format("search messages failed, request_id:%s, query:[%s]", e.getRequestId(), searchRequest), e);
} catch (Exception e) {
throw Exceptions.runtimeThrowable(String.format("search messages failed, query:[%s]", searchRequest), e);
}
}