|
67 | 67 | import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
68 | 68 | import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
69 | 69 | import org.elasticsearch.search.sort.FieldSortBuilder;
|
| 70 | +import org.elasticsearch.search.sort.ScoreSortBuilder; |
70 | 71 | import org.elasticsearch.search.sort.SortBuilder;
|
71 | 72 | import org.elasticsearch.search.sort.SortBuilders;
|
72 | 73 | import org.elasticsearch.search.sort.SortOrder;
|
|
131 | 132 | public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
|
132 | 133 |
|
133 | 134 | private static final Logger logger = LoggerFactory.getLogger(ElasticsearchTemplate.class);
|
| 135 | + private static final String FIELD_SCORE = "_score"; |
| 136 | + |
134 | 137 | private Client client;
|
135 | 138 | private ElasticsearchConverter elasticsearchConverter;
|
136 | 139 | private ResultsMapper resultsMapper;
|
@@ -1022,15 +1025,27 @@ private SearchRequestBuilder prepareSearch(Query query) {
|
1022 | 1025 |
|
1023 | 1026 | if (query.getSort() != null) {
|
1024 | 1027 | for (Sort.Order order : query.getSort()) {
|
1025 |
| - FieldSortBuilder sort = SortBuilders.fieldSort(order.getProperty()) |
1026 |
| - .order(order.getDirection().isDescending() ? SortOrder.DESC : SortOrder.ASC); |
1027 |
| - if (order.getNullHandling() == Sort.NullHandling.NULLS_FIRST) { |
1028 |
| - sort.missing("_first"); |
1029 |
| - } |
1030 |
| - else if (order.getNullHandling() == Sort.NullHandling.NULLS_LAST) { |
1031 |
| - sort.missing("_last"); |
| 1028 | + SortOrder sortOrder = order.getDirection().isDescending() ? SortOrder.DESC : SortOrder.ASC; |
| 1029 | + |
| 1030 | + if (FIELD_SCORE.equals(order.getProperty())) { |
| 1031 | + ScoreSortBuilder sort = SortBuilders // |
| 1032 | + .scoreSort() // |
| 1033 | + .order(sortOrder); |
| 1034 | + |
| 1035 | + searchRequestBuilder.addSort(sort); |
| 1036 | + } else { |
| 1037 | + FieldSortBuilder sort = SortBuilders // |
| 1038 | + .fieldSort(order.getProperty()) // |
| 1039 | + .order(sortOrder); |
| 1040 | + |
| 1041 | + if (order.getNullHandling() == Sort.NullHandling.NULLS_FIRST) { |
| 1042 | + sort.missing("_first"); |
| 1043 | + } else if (order.getNullHandling() == Sort.NullHandling.NULLS_LAST) { |
| 1044 | + sort.missing("_last"); |
| 1045 | + } |
| 1046 | + |
| 1047 | + searchRequestBuilder.addSort(sort); |
1032 | 1048 | }
|
1033 |
| - searchRequestBuilder.addSort(sort); |
1034 | 1049 | }
|
1035 | 1050 | }
|
1036 | 1051 |
|
|
0 commit comments