|
95 | 95 | import org.elasticsearch.index.rankeval.RatedRequest; |
96 | 96 | import org.elasticsearch.index.rankeval.RestRankEvalAction; |
97 | 97 | import org.elasticsearch.rest.action.search.RestSearchAction; |
| 98 | +import org.elasticsearch.script.ScriptType; |
| 99 | +import org.elasticsearch.script.mustache.SearchTemplateRequest; |
98 | 100 | import org.elasticsearch.search.Scroll; |
99 | 101 | import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; |
100 | 102 | import org.elasticsearch.search.aggregations.support.ValueType; |
@@ -1011,36 +1013,7 @@ public void testSearch() throws Exception { |
1011 | 1013 | searchRequest.types(types); |
1012 | 1014 |
|
1013 | 1015 | Map<String, String> expectedParams = new HashMap<>(); |
1014 | | - expectedParams.put(RestSearchAction.TYPED_KEYS_PARAM, "true"); |
1015 | | - if (randomBoolean()) { |
1016 | | - searchRequest.routing(randomAlphaOfLengthBetween(3, 10)); |
1017 | | - expectedParams.put("routing", searchRequest.routing()); |
1018 | | - } |
1019 | | - if (randomBoolean()) { |
1020 | | - searchRequest.preference(randomAlphaOfLengthBetween(3, 10)); |
1021 | | - expectedParams.put("preference", searchRequest.preference()); |
1022 | | - } |
1023 | | - if (randomBoolean()) { |
1024 | | - searchRequest.searchType(randomFrom(SearchType.values())); |
1025 | | - } |
1026 | | - expectedParams.put("search_type", searchRequest.searchType().name().toLowerCase(Locale.ROOT)); |
1027 | | - if (randomBoolean()) { |
1028 | | - searchRequest.requestCache(randomBoolean()); |
1029 | | - expectedParams.put("request_cache", Boolean.toString(searchRequest.requestCache())); |
1030 | | - } |
1031 | | - if (randomBoolean()) { |
1032 | | - searchRequest.allowPartialSearchResults(randomBoolean()); |
1033 | | - expectedParams.put("allow_partial_search_results", Boolean.toString(searchRequest.allowPartialSearchResults())); |
1034 | | - } |
1035 | | - if (randomBoolean()) { |
1036 | | - searchRequest.setBatchedReduceSize(randomIntBetween(2, Integer.MAX_VALUE)); |
1037 | | - } |
1038 | | - expectedParams.put("batched_reduce_size", Integer.toString(searchRequest.getBatchedReduceSize())); |
1039 | | - if (randomBoolean()) { |
1040 | | - searchRequest.scroll(randomTimeValue()); |
1041 | | - expectedParams.put("scroll", searchRequest.scroll().keepAlive().getStringRep()); |
1042 | | - } |
1043 | | - |
| 1016 | + setRandomSearchParams(searchRequest, expectedParams); |
1044 | 1017 | setRandomIndicesOptions(searchRequest::indicesOptions, searchRequest::indicesOptions, expectedParams); |
1045 | 1018 |
|
1046 | 1019 | SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); |
@@ -1189,6 +1162,65 @@ public void testClearScroll() throws IOException { |
1189 | 1162 | assertEquals(REQUEST_BODY_CONTENT_TYPE.mediaTypeWithoutParameters(), request.getEntity().getContentType().getValue()); |
1190 | 1163 | } |
1191 | 1164 |
|
| 1165 | + public void testSearchTemplate() throws Exception { |
| 1166 | + // Create a random request. |
| 1167 | + String[] indices = randomIndicesNames(0, 5); |
| 1168 | + SearchRequest searchRequest = new SearchRequest(indices); |
| 1169 | + |
| 1170 | + Map<String, String> expectedParams = new HashMap<>(); |
| 1171 | + setRandomSearchParams(searchRequest, expectedParams); |
| 1172 | + setRandomIndicesOptions(searchRequest::indicesOptions, searchRequest::indicesOptions, expectedParams); |
| 1173 | + |
| 1174 | + SearchTemplateRequest searchTemplateRequest = new SearchTemplateRequest(searchRequest); |
| 1175 | + |
| 1176 | + searchTemplateRequest.setScript("{\"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" }}}"); |
| 1177 | + searchTemplateRequest.setScriptType(ScriptType.INLINE); |
| 1178 | + searchTemplateRequest.setProfile(randomBoolean()); |
| 1179 | + |
| 1180 | + Map<String, Object> scriptParams = new HashMap<>(); |
| 1181 | + scriptParams.put("field", "name"); |
| 1182 | + scriptParams.put("value", "soren"); |
| 1183 | + searchTemplateRequest.setScriptParams(scriptParams); |
| 1184 | + |
| 1185 | + // Verify that the resulting REST request looks as expected. |
| 1186 | + Request request = RequestConverters.searchTemplate(searchTemplateRequest); |
| 1187 | + StringJoiner endpoint = new StringJoiner("/", "/", ""); |
| 1188 | + String index = String.join(",", indices); |
| 1189 | + if (Strings.hasLength(index)) { |
| 1190 | + endpoint.add(index); |
| 1191 | + } |
| 1192 | + endpoint.add("_search/template"); |
| 1193 | + |
| 1194 | + assertEquals(HttpGet.METHOD_NAME, request.getMethod()); |
| 1195 | + assertEquals(endpoint.toString(), request.getEndpoint()); |
| 1196 | + assertEquals(expectedParams, request.getParameters()); |
| 1197 | + assertToXContentBody(searchTemplateRequest, request.getEntity()); |
| 1198 | + } |
| 1199 | + |
| 1200 | + public void testRenderSearchTemplate() throws Exception { |
| 1201 | + // Create a simple request. |
| 1202 | + SearchTemplateRequest searchTemplateRequest = new SearchTemplateRequest(); |
| 1203 | + searchTemplateRequest.setSimulate(true); // Setting simulate true means the template should only be rendered. |
| 1204 | + |
| 1205 | + searchTemplateRequest.setScript("template1"); |
| 1206 | + searchTemplateRequest.setScriptType(ScriptType.STORED); |
| 1207 | + searchTemplateRequest.setProfile(randomBoolean()); |
| 1208 | + |
| 1209 | + Map<String, Object> scriptParams = new HashMap<>(); |
| 1210 | + scriptParams.put("field", "name"); |
| 1211 | + scriptParams.put("value", "soren"); |
| 1212 | + searchTemplateRequest.setScriptParams(scriptParams); |
| 1213 | + |
| 1214 | + // Verify that the resulting REST request looks as expected. |
| 1215 | + Request request = RequestConverters.searchTemplate(searchTemplateRequest); |
| 1216 | + String endpoint = "_render/template"; |
| 1217 | + |
| 1218 | + assertEquals(HttpGet.METHOD_NAME, request.getMethod()); |
| 1219 | + assertEquals(endpoint, request.getEndpoint()); |
| 1220 | + assertEquals(Collections.emptyMap(), request.getParameters()); |
| 1221 | + assertToXContentBody(searchTemplateRequest, request.getEntity()); |
| 1222 | + } |
| 1223 | + |
1192 | 1224 | public void testExistsAlias() { |
1193 | 1225 | GetAliasesRequest getAliasesRequest = new GetAliasesRequest(); |
1194 | 1226 | String[] indices = randomBoolean() ? null : randomIndicesNames(0, 5); |
@@ -1662,6 +1694,39 @@ private static void randomizeFetchSourceContextParams(Consumer<FetchSourceContex |
1662 | 1694 | } |
1663 | 1695 | } |
1664 | 1696 |
|
| 1697 | + private static void setRandomSearchParams(SearchRequest searchRequest, |
| 1698 | + Map<String, String> expectedParams) { |
| 1699 | + expectedParams.put(RestSearchAction.TYPED_KEYS_PARAM, "true"); |
| 1700 | + if (randomBoolean()) { |
| 1701 | + searchRequest.routing(randomAlphaOfLengthBetween(3, 10)); |
| 1702 | + expectedParams.put("routing", searchRequest.routing()); |
| 1703 | + } |
| 1704 | + if (randomBoolean()) { |
| 1705 | + searchRequest.preference(randomAlphaOfLengthBetween(3, 10)); |
| 1706 | + expectedParams.put("preference", searchRequest.preference()); |
| 1707 | + } |
| 1708 | + if (randomBoolean()) { |
| 1709 | + searchRequest.searchType(randomFrom(SearchType.values())); |
| 1710 | + } |
| 1711 | + expectedParams.put("search_type", searchRequest.searchType().name().toLowerCase(Locale.ROOT)); |
| 1712 | + if (randomBoolean()) { |
| 1713 | + searchRequest.requestCache(randomBoolean()); |
| 1714 | + expectedParams.put("request_cache", Boolean.toString(searchRequest.requestCache())); |
| 1715 | + } |
| 1716 | + if (randomBoolean()) { |
| 1717 | + searchRequest.allowPartialSearchResults(randomBoolean()); |
| 1718 | + expectedParams.put("allow_partial_search_results", Boolean.toString(searchRequest.allowPartialSearchResults())); |
| 1719 | + } |
| 1720 | + if (randomBoolean()) { |
| 1721 | + searchRequest.setBatchedReduceSize(randomIntBetween(2, Integer.MAX_VALUE)); |
| 1722 | + } |
| 1723 | + expectedParams.put("batched_reduce_size", Integer.toString(searchRequest.getBatchedReduceSize())); |
| 1724 | + if (randomBoolean()) { |
| 1725 | + searchRequest.scroll(randomTimeValue()); |
| 1726 | + expectedParams.put("scroll", searchRequest.scroll().keepAlive().getStringRep()); |
| 1727 | + } |
| 1728 | + } |
| 1729 | + |
1665 | 1730 | private static void setRandomIndicesOptions(Consumer<IndicesOptions> setter, Supplier<IndicesOptions> getter, |
1666 | 1731 | Map<String, String> expectedParams) { |
1667 | 1732 |
|
|
0 commit comments