diff --git a/pom.xml b/pom.xml index 954647445..5a24f2b17 100644 --- a/pom.xml +++ b/pom.xml @@ -19,8 +19,8 @@ 3.2.1 2.6 - 5.5.0 - 2.8.2 + 6.1.0 + 2.9.1 2.1.0.BUILD-SNAPSHOT spring.data.elasticsearch diff --git a/src/main/java/org/springframework/data/elasticsearch/client/NodeClientFactoryBean.java b/src/main/java/org/springframework/data/elasticsearch/client/NodeClientFactoryBean.java index 717e2895a..7371c45e8 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/NodeClientFactoryBean.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/NodeClientFactoryBean.java @@ -38,6 +38,7 @@ import static java.util.Arrays.*; * * @author Rizwan Idrees * @author Mohsin Husen + * @author Ilkang Na */ public class NodeClientFactoryBean implements FactoryBean, InitializingBean, DisposableBean { @@ -85,13 +86,11 @@ public class NodeClientFactoryBean implements FactoryBean, InitializingB nodeClient = (NodeClient) new TestNode( Settings.builder().put(loadConfig()) .put("transport.type", "netty4") - .put("transport.type", "local") .put("http.type", "netty4") .put("path.home", this.pathHome) .put("path.data", this.pathData) .put("cluster.name", this.clusterName) .put("node.max_local_storage_nodes", 100) - .put("script.inline", "true") .build(), asList(Netty4Plugin.class)).start().client(); } @@ -99,7 +98,7 @@ public class NodeClientFactoryBean implements FactoryBean, InitializingB if (StringUtils.isNotBlank(pathConfiguration)) { InputStream stream = getClass().getClassLoader().getResourceAsStream(pathConfiguration); if (stream != null) { - return Settings.builder().loadFromStream(pathConfiguration, getClass().getClassLoader().getResourceAsStream(pathConfiguration)).build(); + return Settings.builder().loadFromStream(pathConfiguration, getClass().getClassLoader().getResourceAsStream(pathConfiguration), false).build(); } logger.error(String.format("Unable to read node configuration from file [%s]", pathConfiguration)); } diff --git a/src/main/java/org/springframework/data/elasticsearch/client/TransportClientFactoryBean.java b/src/main/java/org/springframework/data/elasticsearch/client/TransportClientFactoryBean.java index 2d4ee0f91..a3bc1ab00 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/TransportClientFactoryBean.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/TransportClientFactoryBean.java @@ -1,156 +1,163 @@ -/* - * Copyright 2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.elasticsearch.client; - -import static org.apache.commons.lang.StringUtils.*; - -import java.net.InetAddress; -import java.util.Properties; - -import org.elasticsearch.client.transport.TransportClient; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.transport.InetSocketTransportAddress; -import org.elasticsearch.transport.client.PreBuiltTransportClient; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.util.Assert; - -/** - * TransportClientFactoryBean - * - * @author Rizwan Idrees - * @author Mohsin Husen - * @author Jakub Vavrik - * @author Piotr Betkier - */ - -public class TransportClientFactoryBean implements FactoryBean, InitializingBean, DisposableBean { - - private static final Logger logger = LoggerFactory.getLogger(TransportClientFactoryBean.class); - private String clusterNodes = "127.0.0.1:9300"; - private String clusterName = "elasticsearch"; - private Boolean clientTransportSniff = true; - private Boolean clientIgnoreClusterName = Boolean.FALSE; - private String clientPingTimeout = "5s"; - private String clientNodesSamplerInterval = "5s"; - private TransportClient client; - private Properties properties; - static final String COLON = ":"; - static final String COMMA = ","; - - @Override - public void destroy() throws Exception { - try { - logger.info("Closing elasticSearch client"); - if (client != null) { - client.close(); - } - } catch (final Exception e) { - logger.error("Error closing ElasticSearch client: ", e); - } - } - - @Override - public TransportClient getObject() throws Exception { - return client; - } - - @Override - public Class getObjectType() { - return TransportClient.class; - } - - @Override - public boolean isSingleton() { - return false; - } - - @Override - public void afterPropertiesSet() throws Exception { - buildClient(); - } - - protected void buildClient() throws Exception { - - client = new PreBuiltTransportClient(settings()); - Assert.hasText(clusterNodes, "[Assertion failed] clusterNodes settings missing."); - for (String clusterNode : split(clusterNodes, COMMA)) { - String hostName = substringBeforeLast(clusterNode, COLON); - String port = substringAfterLast(clusterNode, COLON); - Assert.hasText(hostName, "[Assertion failed] missing host name in 'clusterNodes'"); - Assert.hasText(port, "[Assertion failed] missing port in 'clusterNodes'"); - logger.info("adding transport node : " + clusterNode); - client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port))); - } - client.connectedNodes(); - } - - private Settings settings() { - if (properties != null) { - return Settings.builder().put(properties).build(); - } - return Settings.builder() - .put("cluster.name", clusterName) - .put("client.transport.sniff", clientTransportSniff) - .put("client.transport.ignore_cluster_name", clientIgnoreClusterName) - .put("client.transport.ping_timeout", clientPingTimeout) - .put("client.transport.nodes_sampler_interval", clientNodesSamplerInterval) - .build(); - } - - public void setClusterNodes(String clusterNodes) { - this.clusterNodes = clusterNodes; - } - - public void setClusterName(String clusterName) { - this.clusterName = clusterName; - } - - public void setClientTransportSniff(Boolean clientTransportSniff) { - this.clientTransportSniff = clientTransportSniff; - } - - public String getClientNodesSamplerInterval() { - return clientNodesSamplerInterval; - } - - public void setClientNodesSamplerInterval(String clientNodesSamplerInterval) { - this.clientNodesSamplerInterval = clientNodesSamplerInterval; - } - - public String getClientPingTimeout() { - return clientPingTimeout; - } - - public void setClientPingTimeout(String clientPingTimeout) { - this.clientPingTimeout = clientPingTimeout; - } - - public Boolean getClientIgnoreClusterName() { - return clientIgnoreClusterName; - } - - public void setClientIgnoreClusterName(Boolean clientIgnoreClusterName) { - this.clientIgnoreClusterName = clientIgnoreClusterName; - } - - public void setProperties(Properties properties) { - this.properties = properties; - } -} +/* + * Copyright 2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.elasticsearch.client; + +import static org.apache.commons.lang.StringUtils.*; + +import java.net.InetAddress; +import java.util.Properties; + +import org.elasticsearch.client.transport.TransportClient; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.transport.TransportAddress; +import org.elasticsearch.transport.client.PreBuiltTransportClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.util.Assert; + +/** + * TransportClientFactoryBean + * + * @author Rizwan Idrees + * @author Mohsin Husen + * @author Jakub Vavrik + * @author Piotr Betkier + * @author Ilkang Na + */ + +public class TransportClientFactoryBean implements FactoryBean, InitializingBean, DisposableBean { + + private static final Logger logger = LoggerFactory.getLogger(TransportClientFactoryBean.class); + private String clusterNodes = "127.0.0.1:9300"; + private String clusterName = "elasticsearch"; + private Boolean clientTransportSniff = true; + private Boolean clientIgnoreClusterName = Boolean.FALSE; + private String clientPingTimeout = "5s"; + private String clientNodesSamplerInterval = "5s"; + private TransportClient client; + private Properties properties; + static final String COLON = ":"; + static final String COMMA = ","; + + @Override + public void destroy() throws Exception { + try { + logger.info("Closing elasticSearch client"); + if (client != null) { + client.close(); + } + } catch (final Exception e) { + logger.error("Error closing ElasticSearch client: ", e); + } + } + + @Override + public TransportClient getObject() throws Exception { + return client; + } + + @Override + public Class getObjectType() { + return TransportClient.class; + } + + @Override + public boolean isSingleton() { + return false; + } + + @Override + public void afterPropertiesSet() throws Exception { + buildClient(); + } + + protected void buildClient() throws Exception { + + client = new PreBuiltTransportClient(settings()); + Assert.hasText(clusterNodes, "[Assertion failed] clusterNodes settings missing."); + for (String clusterNode : split(clusterNodes, COMMA)) { + String hostName = substringBeforeLast(clusterNode, COLON); + String port = substringAfterLast(clusterNode, COLON); + Assert.hasText(hostName, "[Assertion failed] missing host name in 'clusterNodes'"); + Assert.hasText(port, "[Assertion failed] missing port in 'clusterNodes'"); + logger.info("adding transport node : " + clusterNode); + client.addTransportAddress(new TransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port))); + } + client.connectedNodes(); + } + + private Settings settings() { + if (properties != null) { + Settings.Builder builder = Settings.builder(); + + properties.forEach((key, value) -> { + builder.put(key.toString(), value.toString()); + }); + + return builder.build(); + } + return Settings.builder() + .put("cluster.name", clusterName) + .put("client.transport.sniff", clientTransportSniff) + .put("client.transport.ignore_cluster_name", clientIgnoreClusterName) + .put("client.transport.ping_timeout", clientPingTimeout) + .put("client.transport.nodes_sampler_interval", clientNodesSamplerInterval) + .build(); + } + + public void setClusterNodes(String clusterNodes) { + this.clusterNodes = clusterNodes; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public void setClientTransportSniff(Boolean clientTransportSniff) { + this.clientTransportSniff = clientTransportSniff; + } + + public String getClientNodesSamplerInterval() { + return clientNodesSamplerInterval; + } + + public void setClientNodesSamplerInterval(String clientNodesSamplerInterval) { + this.clientNodesSamplerInterval = clientNodesSamplerInterval; + } + + public String getClientPingTimeout() { + return clientPingTimeout; + } + + public void setClientPingTimeout(String clientPingTimeout) { + this.clientPingTimeout = clientPingTimeout; + } + + public Boolean getClientIgnoreClusterName() { + return clientIgnoreClusterName; + } + + public void setClientIgnoreClusterName(Boolean clientIgnoreClusterName) { + this.clientIgnoreClusterName = clientIgnoreClusterName; + } + + public void setProperties(Properties properties) { + this.properties = properties; + } +} diff --git a/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java b/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java index 3e21c5e79..d75e4535c 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java @@ -28,8 +28,8 @@ import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetResponse; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.common.document.DocumentField; import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.SearchHitField; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.ElasticsearchException; import org.springframework.data.elasticsearch.annotations.Document; @@ -50,6 +50,7 @@ import com.fasterxml.jackson.core.JsonGenerator; * @author Young Gu * @author Oliver Gierke * @author Mark Paluch + * @author Ilkang Na */ public class DefaultResultMapper extends AbstractResultMapper { @@ -77,13 +78,13 @@ public class DefaultResultMapper extends AbstractResultMapper { @Override public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { - long totalHits = response.getHits().totalHits(); + long totalHits = response.getHits().getTotalHits(); List results = new ArrayList<>(); for (SearchHit hit : response.getHits()) { if (hit != null) { T result = null; - if (StringUtils.isNotBlank(hit.sourceAsString())) { - result = mapEntity(hit.sourceAsString(), clazz); + if (StringUtils.isNotBlank(hit.getSourceAsString())) { + result = mapEntity(hit.getSourceAsString(), clazz); } else { result = mapEntity(hit.getFields().values(), clazz); } @@ -102,7 +103,7 @@ public class DefaultResultMapper extends AbstractResultMapper { ScriptedField scriptedField = field.getAnnotation(ScriptedField.class); if (scriptedField != null) { String name = scriptedField.name().isEmpty() ? field.getName() : scriptedField.name(); - SearchHitField searchHitField = hit.getFields().get(name); + DocumentField searchHitField = hit.getFields().get(name); if (searchHitField != null) { field.setAccessible(true); try { @@ -119,17 +120,17 @@ public class DefaultResultMapper extends AbstractResultMapper { } } - private T mapEntity(Collection values, Class clazz) { + private T mapEntity(Collection values, Class clazz) { return mapEntity(buildJSONFromFields(values), clazz); } - private String buildJSONFromFields(Collection values) { + private String buildJSONFromFields(Collection values) { JsonFactory nodeFactory = new JsonFactory(); try { ByteArrayOutputStream stream = new ByteArrayOutputStream(); JsonGenerator generator = nodeFactory.createGenerator(stream, JsonEncoding.UTF8); generator.writeStartObject(); - for (SearchHitField value : values) { + for (DocumentField value : values) { if (value.getValues().size() > 1) { generator.writeArrayFieldStart(value.getName()); for (Object val : value.getValues()) { diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 74702a998..1a6d78b7d 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -15,18 +15,22 @@ */ package org.springframework.data.elasticsearch.core; +import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.elasticsearch.client.Requests.indicesExistsRequest; +import static org.elasticsearch.client.Requests.refreshRequest; +import static org.elasticsearch.index.VersionType.EXTERNAL; +import static org.elasticsearch.index.query.QueryBuilders.moreLikeThisQuery; +import static org.elasticsearch.index.query.QueryBuilders.wrapperQuery; +import static org.springframework.data.elasticsearch.core.MappingBuilder.buildMapping; +import static org.springframework.util.CollectionUtils.isEmpty; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; -import org.elasticsearch.action.ListenableActionFuture; +import java.util.*; + +import org.elasticsearch.action.ActionFuture; import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest; import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest; import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder; @@ -51,8 +55,10 @@ import org.elasticsearch.client.Requests; import org.elasticsearch.cluster.metadata.AliasMetaData; import org.elasticsearch.common.Nullable; import org.elasticsearch.common.collect.MapBuilder; +import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.MoreLikeThisQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; @@ -87,12 +93,6 @@ import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMa import org.springframework.data.elasticsearch.core.query.*; import org.springframework.data.util.CloseableIterator; import org.springframework.util.Assert; -import static org.apache.commons.lang.StringUtils.*; -import static org.elasticsearch.client.Requests.*; -import static org.elasticsearch.index.VersionType.*; -import static org.elasticsearch.index.query.QueryBuilders.*; -import static org.springframework.data.elasticsearch.core.MappingBuilder.*; -import static org.springframework.util.CollectionUtils.isEmpty; /** * ElasticsearchTemplate @@ -106,6 +106,7 @@ import static org.springframework.util.CollectionUtils.isEmpty; * @author Oliver Gierke * @author Mark Janssen * @author Mark Paluch + * @author Ilkang Na */ public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware { @@ -208,7 +209,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati Assert.notNull(type, "No type defined for putMapping()"); PutMappingRequestBuilder requestBuilder = client.admin().indices().preparePutMapping(indexName).setType(type); if (mapping instanceof String) { - requestBuilder.setSource(String.valueOf(mapping)); + requestBuilder.setSource(String.valueOf(mapping), XContentType.JSON); } else if (mapping instanceof Map) { requestBuilder.setSource((Map) mapping); } else if (mapping instanceof XContentBuilder) { @@ -867,8 +868,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati } if (!searchQuery.getScriptFields().isEmpty()) { - //_source should be return all the time - //searchRequest.addStoredField("_source"); + // _source should be return all the time + // searchRequest.addStoredField("_source"); for (ScriptField scriptedField : searchQuery.getScriptFields()) { searchRequest.addScriptField(scriptedField.fieldName(), scriptedField.script()); } @@ -900,7 +901,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati return getSearchResponse(searchRequest.setQuery(searchQuery.getQuery()).execute()); } - private SearchResponse getSearchResponse(ListenableActionFuture response) { + private SearchResponse getSearchResponse(ActionFuture response) { return searchTimeout == null ? response.actionGet() : response.actionGet(searchTimeout); } @@ -927,7 +928,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati public boolean createIndex(String indexName, Object settings) { CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(indexName); if (settings instanceof String) { - createIndexRequestBuilder.setSettings(String.valueOf(settings)); + createIndexRequestBuilder.setSettings(String.valueOf(settings), Requests.INDEX_CONTENT_TYPE); } else if (settings instanceof Map) { createIndexRequestBuilder.setSettings((Map) settings); } else if (settings instanceof XContentBuilder) { @@ -960,8 +961,16 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati @Override public Map getSetting(String indexName) { Assert.notNull(indexName, "No index defined for getSettings"); - return client.admin().indices().getSettings(new GetSettingsRequest()).actionGet().getIndexToSettings() - .get(indexName).getAsMap(); + Settings settings = client.admin().indices().getSettings(new GetSettingsRequest()).actionGet().getIndexToSettings() + .get(indexName); + + SortedMap settingsMap = new TreeMap<>(); + + settings.keySet().forEach((key) -> { + settingsMap.put(key, String.valueOf(settings.get(key))); + }); + + return Collections.unmodifiableSortedMap(settingsMap); } private SearchRequestBuilder prepareSearch(Query query, Class clazz) { @@ -989,7 +998,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati searchRequestBuilder.setFrom(startRecord); if (!query.getFields().isEmpty()) { - searchRequestBuilder.setFetchSource(toArray(query.getFields()),null); + searchRequestBuilder.setFetchSource(toArray(query.getFields()), null); } if (query.getSort() != null) { @@ -1008,7 +1017,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati private IndexRequestBuilder prepareIndex(IndexQuery query) { try { String indexName = isBlank(query.getIndexName()) - ? retrieveIndexNameFromPersistentEntity(query.getObject().getClass())[0] : query.getIndexName(); + ? retrieveIndexNameFromPersistentEntity(query.getObject().getClass())[0] + : query.getIndexName(); String type = isBlank(query.getType()) ? retrieveTypeFromPersistentEntity(query.getObject().getClass())[0] : query.getType(); @@ -1022,9 +1032,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati } else { indexRequestBuilder = client.prepareIndex(indexName, type); } - indexRequestBuilder.setSource(resultsMapper.getEntityMapper().mapToString(query.getObject())); + indexRequestBuilder.setSource(resultsMapper.getEntityMapper().mapToString(query.getObject()), + Requests.INDEX_CONTENT_TYPE); } else if (query.getSource() != null) { - indexRequestBuilder = client.prepareIndex(indexName, type, query.getId()).setSource(query.getSource()); + indexRequestBuilder = client.prepareIndex(indexName, type, query.getId()).setSource(query.getSource(), + Requests.INDEX_CONTENT_TYPE); } else { throw new ElasticsearchException( "object or source is null, failed to index the document [id: " + query.getId() + "]"); @@ -1059,7 +1071,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati public Boolean addAlias(AliasQuery query) { Assert.notNull(query.getIndexName(), "No index defined for Alias"); Assert.notNull(query.getAliasName(), "No alias defined"); - final IndicesAliasesRequest.AliasActions aliasAction = IndicesAliasesRequest.AliasActions.add().alias(query.getAliasName()).index(query.getIndexName()); + final IndicesAliasesRequest.AliasActions aliasAction = IndicesAliasesRequest.AliasActions.add() + .alias(query.getAliasName()).index(query.getIndexName()); if (query.getFilterBuilder() != null) { aliasAction.filter(query.getFilterBuilder()); @@ -1101,7 +1114,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(entity.getClass()); Object identifier = persistentEntity.getIdentifierAccessor(entity).getIdentifier(); - if (identifier != null){ + if (identifier != null) { return identifier.toString(); } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/facet/request/TermFacetRequest.java b/src/main/java/org/springframework/data/elasticsearch/core/facet/request/TermFacetRequest.java index 1cf99384d..caa652642 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/facet/request/TermFacetRequest.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/facet/request/TermFacetRequest.java @@ -21,17 +21,17 @@ import org.apache.commons.lang.StringUtils; import org.apache.lucene.util.automaton.RegExp; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.bucket.terms.Terms; +import org.elasticsearch.search.aggregations.BucketOrder; +import org.elasticsearch.search.aggregations.bucket.terms.IncludeExclude; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; -import org.elasticsearch.search.aggregations.bucket.terms.support.IncludeExclude; import org.springframework.data.elasticsearch.core.facet.AbstractFacetRequest; import org.springframework.util.Assert; - /** * Term facet * * @author Artur Konczak + * @author Ilkang Na */ @Deprecated public class TermFacetRequest extends AbstractFacetRequest { @@ -81,19 +81,19 @@ public class TermFacetRequest extends AbstractFacetRequest { switch (order) { case descTerm: - termsBuilder.order(Terms.Order.term(false)); + termsBuilder.order(BucketOrder.key(false)); break; case ascTerm: - termsBuilder.order(Terms.Order.term(true)); + termsBuilder.order(BucketOrder.key(true)); break; case descCount: - termsBuilder.order(Terms.Order.count(false)); + termsBuilder.order(BucketOrder.count(false)); break; default: - termsBuilder.order(Terms.Order.count(true)); + termsBuilder.order(BucketOrder.count(true)); } if (ArrayUtils.isNotEmpty(excludeTerms)) { - termsBuilder.includeExclude(new IncludeExclude(null,excludeTerms)); + termsBuilder.includeExclude(new IncludeExclude(null, excludeTerms)); } if (allTerms) { @@ -101,9 +101,9 @@ public class TermFacetRequest extends AbstractFacetRequest { } if (StringUtils.isNotBlank(regex)) { - termsBuilder.includeExclude(new IncludeExclude(new RegExp(regex),null)); + termsBuilder.includeExclude(new IncludeExclude(new RegExp(regex), null)); } return termsBuilder; } -} \ No newline at end of file +} diff --git a/src/test/java/org/springframework/data/elasticsearch/Utils.java b/src/test/java/org/springframework/data/elasticsearch/Utils.java index 5aa016fa7..a11a2a3d6 100644 --- a/src/test/java/org/springframework/data/elasticsearch/Utils.java +++ b/src/test/java/org/springframework/data/elasticsearch/Utils.java @@ -26,6 +26,7 @@ import static java.util.Arrays.*; /** * @author Mohsin Husen * @author Artur Konczak + * @author Ilkang Na */ public class Utils { @@ -38,13 +39,11 @@ public class Utils { return new NodeClientFactoryBean.TestNode( Settings.builder() .put("transport.type", "netty4") - .put("transport.type", "local") .put("http.type", "netty4") .put("path.home", pathHome) .put("path.data", pathData) .put("cluster.name", clusterName) .put("node.max_local_storage_nodes", 100) - .put("script.inline", "true") .build(), asList(Netty4Plugin.class)).start().client(); } } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/AliasTests.java b/src/test/java/org/springframework/data/elasticsearch/core/AliasTests.java index 140e45bd8..d866ddee8 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/AliasTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/AliasTests.java @@ -41,6 +41,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Mohsin Husen + * @author Ilkang Na */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:elasticsearch-template-test.xml") @@ -101,7 +102,7 @@ public class AliasTests { // then elasticsearchTemplate.removeAlias(aliasQuery); aliases = elasticsearchTemplate.queryForAlias(indexName); - assertThat(aliases, is(nullValue())); + assertThat(aliases, anyOf(is(nullValue()), hasSize(0))); } /* diff --git a/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java b/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java index bec87ff85..9a525ea8a 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java @@ -15,18 +15,16 @@ */ package org.springframework.data.elasticsearch.core; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; + import com.fasterxml.jackson.databind.util.ArrayIterator; import lombok.Getter; import lombok.NoArgsConstructor; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.common.document.DocumentField; import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.SearchHitField; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.Aggregations; @@ -51,6 +49,7 @@ import static org.mockito.Mockito.*; * @author Artur Konczak * @author Mohsin Husen * @author Mark Paluch + * @author Ilkang Na */ public class DefaultResultMapperTests { @@ -70,7 +69,7 @@ public class DefaultResultMapperTests { //Given SearchHit[] hits = {createCarHit("Ford", "Grat"), createCarHit("BMW", "Arrow")}; SearchHits searchHits = mock(SearchHits.class); - when(searchHits.totalHits()).thenReturn(2L); + when(searchHits.getTotalHits()).thenReturn(2L); when(searchHits.iterator()).thenReturn(new ArrayIterator(hits)); when(response.getHits()).thenReturn(searchHits); @@ -91,7 +90,7 @@ public class DefaultResultMapperTests { //Given SearchHit[] hits = {createCarHit("Ford", "Grat"), createCarHit("BMW", "Arrow")}; SearchHits searchHits = mock(SearchHits.class); - when(searchHits.totalHits()).thenReturn(2L); + when(searchHits.getTotalHits()).thenReturn(2L); when(searchHits.iterator()).thenReturn(new ArrayIterator(hits)); when(response.getHits()).thenReturn(searchHits); @@ -109,7 +108,7 @@ public class DefaultResultMapperTests { //Given SearchHit[] hits = {createCarPartialHit("Ford", "Grat"), createCarPartialHit("BMW", "Arrow")}; SearchHits searchHits = mock(SearchHits.class); - when(searchHits.totalHits()).thenReturn(2L); + when(searchHits.getTotalHits()).thenReturn(2L); when(searchHits.iterator()).thenReturn(new ArrayIterator(hits)); when(response.getHits()).thenReturn(searchHits); @@ -161,13 +160,13 @@ public class DefaultResultMapperTests { private SearchHit createCarHit(String name, String model) { SearchHit hit = mock(SearchHit.class); - when(hit.sourceAsString()).thenReturn(createJsonCar(name, model)); + when(hit.getSourceAsString()).thenReturn(createJsonCar(name, model)); return hit; } private SearchHit createCarPartialHit(String name, String model) { SearchHit hit = mock(SearchHit.class); - when(hit.sourceAsString()).thenReturn(null); + when(hit.getSourceAsString()).thenReturn(null); when(hit.getFields()).thenReturn(createCarFields(name, model)); return hit; } @@ -180,10 +179,10 @@ public class DefaultResultMapperTests { return sb.toString(); } - private Map createCarFields(String name, String model) { - Map result = new HashMap<>(); - result.put("name", new SearchHitField("name", asList(name))); - result.put("model", new SearchHitField("model", asList(model))); + private Map createCarFields(String name, String model) { + Map result = new HashMap<>(); + result.put("name", new DocumentField("name", asList(name))); + result.put("model", new DocumentField("model", asList(model))); return result; } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateParentChildTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateParentChildTests.java index fe2e0bdfe..71d0eab52 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateParentChildTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateParentChildTests.java @@ -31,6 +31,7 @@ import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -45,6 +46,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Philipp Jardas */ +@Ignore(value = "DATAES-421") @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:elasticsearch-template-test.xml") public class ElasticsearchTemplateParentChildTests { @@ -66,6 +68,7 @@ public class ElasticsearchTemplateParentChildTests { elasticsearchTemplate.deleteIndex(ParentEntity.class); } + @Ignore(value = "DATAES-421") @Test public void shouldIndexParentChildEntity() { // index two parents @@ -88,6 +91,7 @@ public class ElasticsearchTemplateParentChildTests { assertThat("parents", parents, contains(hasProperty("id", is(parent1.getId())))); } + @Ignore(value = "DATAES-421") @Test public void shouldUpdateChild() throws Exception { // index parent and child @@ -106,6 +110,7 @@ public class ElasticsearchTemplateParentChildTests { assertThat(response.getShardInfo().getSuccessful(), is(1)); } + @Ignore(value = "DATAES-421") @Test(expected = RoutingMissingException.class) public void shouldFailWithRoutingMissingExceptionOnUpdateChildIfNotRoutingSetOnUpdateRequest() throws Exception { // index parent and child @@ -121,6 +126,7 @@ public class ElasticsearchTemplateParentChildTests { update(updateRequest); } + @Ignore(value = "DATAES-421") @Test(expected = RoutingMissingException.class) public void shouldFailWithRoutingMissingExceptionOnUpdateChildIfRoutingOnlySetOnRequestDoc() throws Exception { // index parent and child diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java index 30918ba3e..a248dcb44 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -70,6 +70,7 @@ import static org.springframework.data.elasticsearch.utils.IndexBuilder.*; * @author Abdul Mohammed * @author Kevin Leturc * @author Mason Chan + * @author Ilkang Na */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:elasticsearch-template-test.xml") @@ -649,7 +650,7 @@ public class ElasticsearchTemplateTests { public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { List values = new ArrayList<>(); for (SearchHit searchHit : response.getHits()) { - values.add((String) searchHit.getSource().get("message")); + values.add((String) searchHit.getSourceAsMap().get("message")); } return new AggregatedPageImpl<>((List) values); } @@ -780,7 +781,7 @@ public class ElasticsearchTemplateTests { if (response.getHits().getHits().length <= 0) { return new AggregatedPageImpl(Collections.EMPTY_LIST, response.getScrollId()); } - String message = (String) searchHit.getSource().get("message"); + String message = (String) searchHit.getSourceAsMap().get("message"); SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setId(searchHit.getId()); sampleEntity.setMessage(message); @@ -1192,7 +1193,7 @@ public class ElasticsearchTemplateTests { } SampleEntity user = new SampleEntity(); user.setId(searchHit.getId()); - user.setMessage((String) searchHit.getSource().get("message")); + user.setMessage((String) searchHit.getSourceAsMap().get("message")); user.setHighlightedMessage(searchHit.getHighlightFields().get("message").fragments()[0].toString()); chunk.add(user); } @@ -1256,7 +1257,7 @@ public class ElasticsearchTemplateTests { for (SearchHit searchHit : response.getHits()) { SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setId(searchHit.getId()); - sampleEntity.setMessage((String) searchHit.getSource().get("message")); + sampleEntity.setMessage((String) searchHit.getSourceAsMap().get("message")); values.add(sampleEntity); } return new AggregatedPageImpl<>((List) values); @@ -1431,11 +1432,11 @@ public class ElasticsearchTemplateTests { return null; } Map person = new HashMap<>(); - person.put("userId", searchHit.getSource().get("userId")); - person.put("email", searchHit.getSource().get("email")); - person.put("title", searchHit.getSource().get("title")); - person.put("firstName", searchHit.getSource().get("firstName")); - person.put("lastName", searchHit.getSource().get("lastName")); + person.put("userId", searchHit.getSourceAsMap().get("userId")); + person.put("email", searchHit.getSourceAsMap().get("email")); + person.put("title", searchHit.getSourceAsMap().get("title")); + person.put("firstName", searchHit.getSourceAsMap().get("firstName")); + person.put("lastName", searchHit.getSourceAsMap().get("lastName")); chunk.add(person); } if (chunk.size() > 0) { @@ -1942,9 +1943,9 @@ public class ElasticsearchTemplateTests { public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { List values = new ArrayList<>(); for (SearchHit searchHit : response.getHits()) { - String id = String.valueOf(searchHit.getSource().get("id")); - String firstName = StringUtils.isNotEmpty((String) searchHit.getSource().get("firstName")) ? (String) searchHit.getSource().get("firstName") : ""; - String lastName = StringUtils.isNotEmpty((String) searchHit.getSource().get("lastName")) ? (String) searchHit.getSource().get("lastName") : ""; + String id = String.valueOf(searchHit.getSourceAsMap().get("id")); + String firstName = StringUtils.isNotEmpty((String) searchHit.getSourceAsMap().get("firstName")) ? (String) searchHit.getSourceAsMap().get("firstName") : ""; + String lastName = StringUtils.isNotEmpty((String) searchHit.getSourceAsMap().get("lastName")) ? (String) searchHit.getSourceAsMap().get("lastName") : ""; values.add(new ResultAggregator(id, firstName, lastName)); } return new AggregatedPageImpl<>((List) values); diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/DynamicSettingAndMappingEntityRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/DynamicSettingAndMappingEntityRepositoryTests.java index 880343f51..0afbbe7cf 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/DynamicSettingAndMappingEntityRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/DynamicSettingAndMappingEntityRepositoryTests.java @@ -38,6 +38,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * DynamicSettingAndMappingEntityRepositoryTests * * @author Mohsin Husen + * @author Ilkang Na */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:dynamic-settings-test.xml") @@ -134,7 +135,7 @@ public class DynamicSettingAndMappingEntityRepositoryTests { String mappings = "{\n" + " \"test-setting-type\" : {\n" + " \"properties\" : {\n" + - " \"email\" : {\"type\" : \"string\", \"analyzer\" : \"emailAnalyzer\" }\n" + + " \"email\" : {\"type\" : \"text\", \"analyzer\" : \"emailAnalyzer\" }\n" + " }\n" + " }\n" + "}"; diff --git a/src/test/resources/mappings/test-mappings.json b/src/test/resources/mappings/test-mappings.json index d115109f5..74373cabb 100644 --- a/src/test/resources/mappings/test-mappings.json +++ b/src/test/resources/mappings/test-mappings.json @@ -2,7 +2,7 @@ "test-setting-type": { "properties": { "email": { - "type": "string", + "type": "text", "analyzer": "emailAnalyzer" } } diff --git a/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 000000000..ca6ee9cea --- /dev/null +++ b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline \ No newline at end of file diff --git a/src/test/resources/node-client-configuration.yml b/src/test/resources/node-client-configuration.yml index 4d42008f7..22807744d 100644 --- a/src/test/resources/node-client-configuration.yml +++ b/src/test/resources/node-client-configuration.yml @@ -1,3 +1,3 @@ #enabled scripts - this require groovy -script.inline: true +#script.inline: true #node.max_local_storage_nodes: 100 \ No newline at end of file diff --git a/src/test/resources/synonyms/mappings.json b/src/test/resources/synonyms/mappings.json index 875c23c1b..489d750c8 100644 --- a/src/test/resources/synonyms/mappings.json +++ b/src/test/resources/synonyms/mappings.json @@ -1,8 +1,5 @@ { "synonym-type": { - "_all": { - "enabled": true - }, "properties": { "text": { "type": "text", diff --git a/src/test/resources/test-home-dir/modules/lang-expression/lang-expression-5.5.0.jar b/src/test/resources/test-home-dir/modules/lang-expression/lang-expression-5.5.0.jar deleted file mode 100644 index fcf068702..000000000 Binary files a/src/test/resources/test-home-dir/modules/lang-expression/lang-expression-5.5.0.jar and /dev/null differ diff --git a/src/test/resources/test-home-dir/modules/lang-expression/lang-expression-6.1.0.jar b/src/test/resources/test-home-dir/modules/lang-expression/lang-expression-6.1.0.jar new file mode 100644 index 000000000..3f7482118 Binary files /dev/null and b/src/test/resources/test-home-dir/modules/lang-expression/lang-expression-6.1.0.jar differ diff --git a/src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-6.6.0.jar b/src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-7.1.0.jar similarity index 62% rename from src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-6.6.0.jar rename to src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-7.1.0.jar index 8237ab730..1c479a24a 100644 Binary files a/src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-6.6.0.jar and b/src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-7.1.0.jar differ diff --git a/src/test/resources/test-home-dir/modules/lang-expression/plugin-descriptor.properties b/src/test/resources/test-home-dir/modules/lang-expression/plugin-descriptor.properties index cc647f1ea..2486156fe 100644 --- a/src/test/resources/test-home-dir/modules/lang-expression/plugin-descriptor.properties +++ b/src/test/resources/test-home-dir/modules/lang-expression/plugin-descriptor.properties @@ -22,7 +22,7 @@ description=Lucene expressions integration for Elasticsearch # # 'version': plugin's version -version=5.5.0 +version=6.1.0 # # 'name': the plugin name name=lang-expression @@ -37,8 +37,11 @@ classname=org.elasticsearch.script.expression.ExpressionPlugin java.version=1.8 # # 'elasticsearch.version': version of elasticsearch compiled against -elasticsearch.version=5.5.0 +elasticsearch.version=6.1.0 ### optional elements for plugins: # # 'has.native.controller': whether or not the plugin has a native controller has.native.controller=false +# +# 'requires.keystore': whether or not the plugin needs the elasticsearch keystore be created +requires.keystore=false diff --git a/src/test/resources/test-home-dir/modules/lang-groovy/groovy-2.4.6-indy.jar b/src/test/resources/test-home-dir/modules/lang-groovy/groovy-2.4.6-indy.jar deleted file mode 100644 index ce3531e0b..000000000 Binary files a/src/test/resources/test-home-dir/modules/lang-groovy/groovy-2.4.6-indy.jar and /dev/null differ diff --git a/src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-5.5.0.jar b/src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-5.5.0.jar deleted file mode 100644 index b8ffc7562..000000000 Binary files a/src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-5.5.0.jar and /dev/null differ diff --git a/src/test/resources/test-home-dir/modules/lang-groovy/plugin-descriptor.properties b/src/test/resources/test-home-dir/modules/lang-groovy/plugin-descriptor.properties deleted file mode 100644 index 48bfc72db..000000000 --- a/src/test/resources/test-home-dir/modules/lang-groovy/plugin-descriptor.properties +++ /dev/null @@ -1,44 +0,0 @@ -# Elasticsearch plugin descriptor file -# This file must exist as 'plugin-descriptor.properties' in a folder named `elasticsearch` -# inside all plugins. -# -### example plugin for "foo" -# -# foo.zip <-- zip file for the plugin, with this structure: -#|____elasticsearch/ -#| |____ .jar <-- classes, resources, dependencies -#| |____ .jar <-- any number of jars -#| |____ plugin-descriptor.properties <-- example contents below: -# -# classname=foo.bar.BazPlugin -# description=My cool plugin -# version=2.0 -# elasticsearch.version=2.0 -# java.version=1.7 -# -### mandatory elements for all plugins: -# -# 'description': simple summary of the plugin -description=Groovy scripting integration for Elasticsearch -# -# 'version': plugin's version -version=5.5.0 -# -# 'name': the plugin name -name=lang-groovy -# -# 'classname': the name of the class to load, fully-qualified. -classname=org.elasticsearch.script.groovy.GroovyPlugin -# -# 'java.version': version of java the code is built against -# use the system property java.specification.version -# version string must be a sequence of nonnegative decimal integers -# separated by "."'s and may have leading zeros -java.version=1.8 -# -# 'elasticsearch.version': version of elasticsearch compiled against -elasticsearch.version=5.5.0 -### optional elements for plugins: -# -# 'has.native.controller': whether or not the plugin has a native controller -has.native.controller=false diff --git a/src/test/resources/test-home-dir/modules/lang-groovy/plugin-security.policy b/src/test/resources/test-home-dir/modules/lang-groovy/plugin-security.policy deleted file mode 100644 index 13d00d6d1..000000000 --- a/src/test/resources/test-home-dir/modules/lang-groovy/plugin-security.policy +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -grant { - // needed to generate runtime classes - permission java.lang.RuntimePermission "createClassLoader"; - // needed by IndyInterface - permission java.lang.RuntimePermission "getClassLoader"; - // needed by groovy engine - permission java.lang.RuntimePermission "accessDeclaredMembers"; - permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect"; - permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.reflect"; - // Allow executing groovy scripts with codesource of /untrusted - permission groovy.security.GroovyCodeSourcePermission "/untrusted"; - - // Standard set of classes - permission org.elasticsearch.script.ClassPermission "<>"; - // groovy runtime (TODO: clean these up if possible) - permission org.elasticsearch.script.ClassPermission "groovy.grape.GrabAnnotationTransformation"; - permission org.elasticsearch.script.ClassPermission "groovy.lang.Binding"; - permission org.elasticsearch.script.ClassPermission "groovy.lang.GroovyObject"; - permission org.elasticsearch.script.ClassPermission "groovy.lang.GString"; - permission org.elasticsearch.script.ClassPermission "groovy.lang.Script"; - permission org.elasticsearch.script.ClassPermission "groovy.util.GroovyCollections"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.ast.builder.AstBuilderTransformation"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.reflection.ClassInfo"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.GStringImpl"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.powerassert.ValueRecorder"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.powerassert.AssertionRenderer"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.ScriptBytecodeAdapter"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.vmplugin.v7.IndyInterface"; - permission org.elasticsearch.script.ClassPermission "sun.reflect.ConstructorAccessorImpl"; - permission org.elasticsearch.script.ClassPermission "sun.reflect.MethodAccessorImpl"; - permission org.elasticsearch.script.ClassPermission "jdk.internal.reflect.ConstructorAccessorImpl"; - permission org.elasticsearch.script.ClassPermission "jdk.internal.reflect.MethodAccessorImpl"; - - permission org.elasticsearch.script.ClassPermission "groovy.lang.Closure"; - permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.GeneratedClosure"; - permission org.elasticsearch.script.ClassPermission "groovy.lang.MetaClass"; - permission org.elasticsearch.script.ClassPermission "groovy.lang.Range"; - permission org.elasticsearch.script.ClassPermission "groovy.lang.Reference"; -};