|
15 | 15 | */
|
16 | 16 | package org.springframework.data.elasticsearch.core;
|
17 | 17 |
|
18 |
| -import static org.apache.commons.lang.StringUtils.isBlank; |
19 |
| -import static org.apache.commons.lang.StringUtils.isNotBlank; |
20 |
| -import static org.elasticsearch.client.Requests.indicesExistsRequest; |
21 |
| -import static org.elasticsearch.client.Requests.refreshRequest; |
22 |
| -import static org.elasticsearch.index.VersionType.EXTERNAL; |
23 |
| -import static org.elasticsearch.index.query.QueryBuilders.moreLikeThisQuery; |
24 |
| -import static org.elasticsearch.index.query.QueryBuilders.wrapperQuery; |
25 |
| -import static org.springframework.data.elasticsearch.core.MappingBuilder.buildMapping; |
| 18 | +import static org.apache.commons.lang.StringUtils.*; |
| 19 | +import static org.elasticsearch.client.Requests.*; |
| 20 | +import static org.elasticsearch.index.VersionType.*; |
| 21 | +import static org.elasticsearch.index.query.QueryBuilders.*; |
| 22 | +import static org.springframework.data.elasticsearch.core.MappingBuilder.*; |
26 | 23 | import static org.springframework.util.CollectionUtils.isEmpty;
|
27 | 24 |
|
28 | 25 | import java.io.BufferedReader;
|
29 | 26 | import java.io.IOException;
|
30 | 27 | import java.io.InputStreamReader;
|
31 |
| -import java.util.*; |
| 28 | +import java.util.ArrayList; |
| 29 | +import java.util.Collections; |
| 30 | +import java.util.HashMap; |
| 31 | +import java.util.Iterator; |
| 32 | +import java.util.LinkedList; |
| 33 | +import java.util.List; |
| 34 | +import java.util.Map; |
| 35 | +import java.util.NoSuchElementException; |
32 | 36 | import java.util.stream.Collectors;
|
33 | 37 |
|
34 | 38 | import org.elasticsearch.action.ActionFuture;
|
|
67 | 71 | import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
68 | 72 | import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
69 | 73 | import org.elasticsearch.search.sort.FieldSortBuilder;
|
| 74 | +import org.elasticsearch.search.sort.ScoreSortBuilder; |
70 | 75 | import org.elasticsearch.search.sort.SortBuilder;
|
71 | 76 | import org.elasticsearch.search.sort.SortBuilders;
|
72 | 77 | import org.elasticsearch.search.sort.SortOrder;
|
|
93 | 98 | import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity;
|
94 | 99 | import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty;
|
95 | 100 | import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext;
|
96 |
| -import org.springframework.data.elasticsearch.core.query.*; |
| 101 | +import org.springframework.data.elasticsearch.core.query.AliasQuery; |
| 102 | +import org.springframework.data.elasticsearch.core.query.CriteriaQuery; |
| 103 | +import org.springframework.data.elasticsearch.core.query.DeleteQuery; |
| 104 | +import org.springframework.data.elasticsearch.core.query.FetchSourceFilter; |
| 105 | +import org.springframework.data.elasticsearch.core.query.GetQuery; |
| 106 | +import org.springframework.data.elasticsearch.core.query.IndexBoost; |
| 107 | +import org.springframework.data.elasticsearch.core.query.IndexQuery; |
| 108 | +import org.springframework.data.elasticsearch.core.query.MoreLikeThisQuery; |
| 109 | +import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; |
| 110 | +import org.springframework.data.elasticsearch.core.query.Query; |
| 111 | +import org.springframework.data.elasticsearch.core.query.ScriptField; |
| 112 | +import org.springframework.data.elasticsearch.core.query.SearchQuery; |
| 113 | +import org.springframework.data.elasticsearch.core.query.SourceFilter; |
| 114 | +import org.springframework.data.elasticsearch.core.query.StringQuery; |
| 115 | +import org.springframework.data.elasticsearch.core.query.UpdateQuery; |
97 | 116 | import org.springframework.data.util.CloseableIterator;
|
98 | 117 | import org.springframework.util.Assert;
|
99 | 118 |
|
|
118 | 137 | public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
|
119 | 138 |
|
120 | 139 | private static final Logger logger = LoggerFactory.getLogger(ElasticsearchTemplate.class);
|
| 140 | + private static final String FIELD_SCORE = "_score"; |
| 141 | + |
121 | 142 | private Client client;
|
122 | 143 | private ElasticsearchConverter elasticsearchConverter;
|
123 | 144 | private ResultsMapper resultsMapper;
|
@@ -1015,15 +1036,27 @@ private SearchRequestBuilder prepareSearch(Query query) {
|
1015 | 1036 |
|
1016 | 1037 | if (query.getSort() != null) {
|
1017 | 1038 | for (Sort.Order order : query.getSort()) {
|
1018 |
| - FieldSortBuilder sort = SortBuilders.fieldSort(order.getProperty()) |
1019 |
| - .order(order.getDirection().isDescending() ? SortOrder.DESC : SortOrder.ASC); |
1020 |
| - if (order.getNullHandling() == Sort.NullHandling.NULLS_FIRST) { |
1021 |
| - sort.missing("_first"); |
1022 |
| - } |
1023 |
| - else if (order.getNullHandling() == Sort.NullHandling.NULLS_LAST) { |
1024 |
| - sort.missing("_last"); |
| 1039 | + SortOrder sortOrder = order.getDirection().isDescending() ? SortOrder.DESC : SortOrder.ASC; |
| 1040 | + |
| 1041 | + if (FIELD_SCORE.equals(order.getProperty())) { |
| 1042 | + ScoreSortBuilder sort = SortBuilders // |
| 1043 | + .scoreSort() // |
| 1044 | + .order(sortOrder); |
| 1045 | + |
| 1046 | + searchRequestBuilder.addSort(sort); |
| 1047 | + } else { |
| 1048 | + FieldSortBuilder sort = SortBuilders // |
| 1049 | + .fieldSort(order.getProperty()) // |
| 1050 | + .order(sortOrder); |
| 1051 | + |
| 1052 | + if (order.getNullHandling() == Sort.NullHandling.NULLS_FIRST) { |
| 1053 | + sort.missing("_first"); |
| 1054 | + } else if (order.getNullHandling() == Sort.NullHandling.NULLS_LAST) { |
| 1055 | + sort.missing("_last"); |
| 1056 | + } |
| 1057 | + |
| 1058 | + searchRequestBuilder.addSort(sort); |
1025 | 1059 | }
|
1026 |
| - searchRequestBuilder.addSort(sort); |
1027 | 1060 | }
|
1028 | 1061 | }
|
1029 | 1062 |
|
|
0 commit comments