|
101 | 101 | import org.elasticsearch.index.rankeval.RestRankEvalAction; |
102 | 102 | import org.elasticsearch.repositories.fs.FsRepository; |
103 | 103 | import org.elasticsearch.rest.action.search.RestSearchAction; |
| 104 | +import org.elasticsearch.script.ScriptType; |
| 105 | +import org.elasticsearch.script.mustache.SearchTemplateRequest; |
104 | 106 | import org.elasticsearch.search.Scroll; |
105 | 107 | import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; |
106 | 108 | import org.elasticsearch.search.aggregations.support.ValueType; |
@@ -1048,36 +1050,7 @@ public void testSearch() throws Exception { |
1048 | 1050 | searchRequest.types(types); |
1049 | 1051 |
|
1050 | 1052 | Map<String, String> expectedParams = new HashMap<>(); |
1051 | | - expectedParams.put(RestSearchAction.TYPED_KEYS_PARAM, "true"); |
1052 | | - if (randomBoolean()) { |
1053 | | - searchRequest.routing(randomAlphaOfLengthBetween(3, 10)); |
1054 | | - expectedParams.put("routing", searchRequest.routing()); |
1055 | | - } |
1056 | | - if (randomBoolean()) { |
1057 | | - searchRequest.preference(randomAlphaOfLengthBetween(3, 10)); |
1058 | | - expectedParams.put("preference", searchRequest.preference()); |
1059 | | - } |
1060 | | - if (randomBoolean()) { |
1061 | | - searchRequest.searchType(randomFrom(SearchType.values())); |
1062 | | - } |
1063 | | - expectedParams.put("search_type", searchRequest.searchType().name().toLowerCase(Locale.ROOT)); |
1064 | | - if (randomBoolean()) { |
1065 | | - searchRequest.requestCache(randomBoolean()); |
1066 | | - expectedParams.put("request_cache", Boolean.toString(searchRequest.requestCache())); |
1067 | | - } |
1068 | | - if (randomBoolean()) { |
1069 | | - searchRequest.allowPartialSearchResults(randomBoolean()); |
1070 | | - expectedParams.put("allow_partial_search_results", Boolean.toString(searchRequest.allowPartialSearchResults())); |
1071 | | - } |
1072 | | - if (randomBoolean()) { |
1073 | | - searchRequest.setBatchedReduceSize(randomIntBetween(2, Integer.MAX_VALUE)); |
1074 | | - } |
1075 | | - expectedParams.put("batched_reduce_size", Integer.toString(searchRequest.getBatchedReduceSize())); |
1076 | | - if (randomBoolean()) { |
1077 | | - searchRequest.scroll(randomTimeValue()); |
1078 | | - expectedParams.put("scroll", searchRequest.scroll().keepAlive().getStringRep()); |
1079 | | - } |
1080 | | - |
| 1053 | + setRandomSearchParams(searchRequest, expectedParams); |
1081 | 1054 | setRandomIndicesOptions(searchRequest::indicesOptions, searchRequest::indicesOptions, expectedParams); |
1082 | 1055 |
|
1083 | 1056 | SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); |
@@ -1227,6 +1200,65 @@ public void testClearScroll() throws IOException { |
1227 | 1200 | assertEquals(REQUEST_BODY_CONTENT_TYPE.mediaTypeWithoutParameters(), request.getEntity().getContentType().getValue()); |
1228 | 1201 | } |
1229 | 1202 |
|
| 1203 | + public void testSearchTemplate() throws Exception { |
| 1204 | + // Create a random request. |
| 1205 | + String[] indices = randomIndicesNames(0, 5); |
| 1206 | + SearchRequest searchRequest = new SearchRequest(indices); |
| 1207 | + |
| 1208 | + Map<String, String> expectedParams = new HashMap<>(); |
| 1209 | + setRandomSearchParams(searchRequest, expectedParams); |
| 1210 | + setRandomIndicesOptions(searchRequest::indicesOptions, searchRequest::indicesOptions, expectedParams); |
| 1211 | + |
| 1212 | + SearchTemplateRequest searchTemplateRequest = new SearchTemplateRequest(searchRequest); |
| 1213 | + |
| 1214 | + searchTemplateRequest.setScript("{\"query\": { \"match\" : { \"{{field}}\" : \"{{value}}\" }}}"); |
| 1215 | + searchTemplateRequest.setScriptType(ScriptType.INLINE); |
| 1216 | + searchTemplateRequest.setProfile(randomBoolean()); |
| 1217 | + |
| 1218 | + Map<String, Object> scriptParams = new HashMap<>(); |
| 1219 | + scriptParams.put("field", "name"); |
| 1220 | + scriptParams.put("value", "soren"); |
| 1221 | + searchTemplateRequest.setScriptParams(scriptParams); |
| 1222 | + |
| 1223 | + // Verify that the resulting REST request looks as expected. |
| 1224 | + Request request = RequestConverters.searchTemplate(searchTemplateRequest); |
| 1225 | + StringJoiner endpoint = new StringJoiner("/", "/", ""); |
| 1226 | + String index = String.join(",", indices); |
| 1227 | + if (Strings.hasLength(index)) { |
| 1228 | + endpoint.add(index); |
| 1229 | + } |
| 1230 | + endpoint.add("_search/template"); |
| 1231 | + |
| 1232 | + assertEquals(HttpGet.METHOD_NAME, request.getMethod()); |
| 1233 | + assertEquals(endpoint.toString(), request.getEndpoint()); |
| 1234 | + assertEquals(expectedParams, request.getParameters()); |
| 1235 | + assertToXContentBody(searchTemplateRequest, request.getEntity()); |
| 1236 | + } |
| 1237 | + |
| 1238 | + public void testRenderSearchTemplate() throws Exception { |
| 1239 | + // Create a simple request. |
| 1240 | + SearchTemplateRequest searchTemplateRequest = new SearchTemplateRequest(); |
| 1241 | + searchTemplateRequest.setSimulate(true); // Setting simulate true means the template should only be rendered. |
| 1242 | + |
| 1243 | + searchTemplateRequest.setScript("template1"); |
| 1244 | + searchTemplateRequest.setScriptType(ScriptType.STORED); |
| 1245 | + searchTemplateRequest.setProfile(randomBoolean()); |
| 1246 | + |
| 1247 | + Map<String, Object> scriptParams = new HashMap<>(); |
| 1248 | + scriptParams.put("field", "name"); |
| 1249 | + scriptParams.put("value", "soren"); |
| 1250 | + searchTemplateRequest.setScriptParams(scriptParams); |
| 1251 | + |
| 1252 | + // Verify that the resulting REST request looks as expected. |
| 1253 | + Request request = RequestConverters.searchTemplate(searchTemplateRequest); |
| 1254 | + String endpoint = "_render/template"; |
| 1255 | + |
| 1256 | + assertEquals(HttpGet.METHOD_NAME, request.getMethod()); |
| 1257 | + assertEquals(endpoint, request.getEndpoint()); |
| 1258 | + assertEquals(Collections.emptyMap(), request.getParameters()); |
| 1259 | + assertToXContentBody(searchTemplateRequest, request.getEntity()); |
| 1260 | + } |
| 1261 | + |
1230 | 1262 | public void testExistsAlias() { |
1231 | 1263 | GetAliasesRequest getAliasesRequest = new GetAliasesRequest(); |
1232 | 1264 | String[] indices = randomBoolean() ? null : randomIndicesNames(0, 5); |
@@ -1798,6 +1830,39 @@ private static void randomizeFetchSourceContextParams(Consumer<FetchSourceContex |
1798 | 1830 | } |
1799 | 1831 | } |
1800 | 1832 |
|
| 1833 | + private static void setRandomSearchParams(SearchRequest searchRequest, |
| 1834 | + Map<String, String> expectedParams) { |
| 1835 | + expectedParams.put(RestSearchAction.TYPED_KEYS_PARAM, "true"); |
| 1836 | + if (randomBoolean()) { |
| 1837 | + searchRequest.routing(randomAlphaOfLengthBetween(3, 10)); |
| 1838 | + expectedParams.put("routing", searchRequest.routing()); |
| 1839 | + } |
| 1840 | + if (randomBoolean()) { |
| 1841 | + searchRequest.preference(randomAlphaOfLengthBetween(3, 10)); |
| 1842 | + expectedParams.put("preference", searchRequest.preference()); |
| 1843 | + } |
| 1844 | + if (randomBoolean()) { |
| 1845 | + searchRequest.searchType(randomFrom(SearchType.values())); |
| 1846 | + } |
| 1847 | + expectedParams.put("search_type", searchRequest.searchType().name().toLowerCase(Locale.ROOT)); |
| 1848 | + if (randomBoolean()) { |
| 1849 | + searchRequest.requestCache(randomBoolean()); |
| 1850 | + expectedParams.put("request_cache", Boolean.toString(searchRequest.requestCache())); |
| 1851 | + } |
| 1852 | + if (randomBoolean()) { |
| 1853 | + searchRequest.allowPartialSearchResults(randomBoolean()); |
| 1854 | + expectedParams.put("allow_partial_search_results", Boolean.toString(searchRequest.allowPartialSearchResults())); |
| 1855 | + } |
| 1856 | + if (randomBoolean()) { |
| 1857 | + searchRequest.setBatchedReduceSize(randomIntBetween(2, Integer.MAX_VALUE)); |
| 1858 | + } |
| 1859 | + expectedParams.put("batched_reduce_size", Integer.toString(searchRequest.getBatchedReduceSize())); |
| 1860 | + if (randomBoolean()) { |
| 1861 | + searchRequest.scroll(randomTimeValue()); |
| 1862 | + expectedParams.put("scroll", searchRequest.scroll().keepAlive().getStringRep()); |
| 1863 | + } |
| 1864 | + } |
| 1865 | + |
1801 | 1866 | private static void setRandomIndicesOptions(Consumer<IndicesOptions> setter, Supplier<IndicesOptions> getter, |
1802 | 1867 | Map<String, String> expectedParams) { |
1803 | 1868 |
|
|
0 commit comments