Example usage for com.amazonaws.services.cloudsearchdomain.model SearchRequest setSort

List of usage examples for com.amazonaws.services.cloudsearchdomain.model SearchRequest setSort

Introduction

In this page you can find the example usage for com.amazonaws.services.cloudsearchdomain.model SearchRequest setSort.

Prototype


public void setSort(String sort) 

Source Link

Document

Specifies the fields or custom expressions to use to sort the search results.

Usage

From source file:com.clicktravel.infrastructure.persistence.aws.cloudsearch.CloudSearchEngine.java

License:Apache License

@Override
public <T extends Document> DocumentSearchResponse<T> search(final Query query, final Integer start,
        final Integer size, final Class<T> documentClass, final SearchOptions options) {

    if (options == null) {
        throw new IllegalArgumentException("SearchOptions cannot be null");
    }/*  www .j ava 2  s. co  m*/

    try {
        final DocumentConfiguration documentConfiguration = getDocumentConfiguration(documentClass);
        final SearchRequest searchRequest = getSearchRequest(query);
        searchRequest.setStart((long) start);
        searchRequest.setSize((long) size);

        if (!options.getExpressions().isEmpty()) {
            searchRequest.setExpr(new JSONObject(options.getExpressions()).toString());
        }

        if (options.getSortOrder() != SortOrder.DEFAULT) {
            final StringBuilder sort = new StringBuilder();
            String direction = null;
            int count = 0;
            for (final SortingOption sortingOption : options.getSortOrder().sortingOptions()) {
                count++;
                sort.append(sortingOption.key() + " ");
                switch (sortingOption.direction()) {
                case ASCENDING:
                default:
                    direction = "asc";
                    break;
                case DESCENDING:
                    direction = "desc";
                    break;
                }
                sort.append(direction);
                if (count < options.getSortOrder().sortingOptions().size()) {
                    sort.append(", ");
                }
            }
            searchRequest.setSort(sort.toString());
        }

        final String searchDomain = documentConfigurationHolder.schemaName() + "-"
                + documentConfiguration.namespace();
        final SearchResult searchResult = getSearchServiceClient(searchDomain).search(searchRequest);
        final List<T> documents = new ArrayList<>();
        for (final Hit hit : searchResult.getHits().getHit()) {
            try {
                documents.add(getDocument(hit, documentClass, documentConfiguration.properties()));
            } catch (final Exception e) {
                throw new IllegalStateException("Could not create Document from CloudSearch response: " + hit,
                        e);
            }
        }
        final long totalResults = searchResult.getHits().getFound();
        final String cursor = searchResult.getHits().getCursor();
        return new DocumentSearchResponse<T>((int) totalResults, cursor, documents);
    } catch (final AmazonServiceException e) {
        throw new PersistenceResourceFailureException("Unable to perform CloudSearch query", e);
    }
}