From 089d7746be2f2fc4a395bd5c814f664729121f21 Mon Sep 17 00:00:00 2001 From: Artur Konczak Date: Tue, 2 May 2017 18:21:31 +0100 Subject: [PATCH] DATAES-285 - upgrade to elasticsearch 5.x --- .gitignore | 3 - pom.xml | 41 ++- .../annotations/CompletionField.java | 2 - .../data/elasticsearch/annotations/Field.java | 4 +- .../elasticsearch/annotations/FieldType.java | 2 +- .../annotations/GeoPointField.java | 4 - .../elasticsearch/annotations/InnerField.java | 4 +- .../client/NodeClientFactoryBean.java | 271 ++++++++-------- .../client/TransportClientFactoryBean.java | 4 +- .../NodeClientBeanDefinitionParser.java | 114 +++---- .../core/CriteriaFilterProcessor.java | 23 +- .../core/CriteriaQueryProcessor.java | 12 +- .../core/DefaultResultMapper.java | 2 +- .../core/ElasticsearchOperations.java | 74 ++--- .../core/ElasticsearchTemplate.java | 243 +++++++-------- .../elasticsearch/core/FacetedPageImpl.java | 2 +- .../elasticsearch/core/MappingBuilder.java | 48 +-- .../data/elasticsearch/core/ScrolledPage.java | 13 + .../core/aggregation/AggregatedPage.java | 3 +- .../aggregation/impl/AggregatedPageImpl.java | 27 ++ .../core/completion/Completion.java | 18 -- .../facet/request/HistogramFacetRequest.java | 8 +- .../core/facet/request/RangeFacetRequest.java | 9 +- .../core/facet/request/TermFacetRequest.java | 10 +- .../core/geo/CustomGeoModule.java | 32 +- .../core/query/NativeSearchQuery.java | 2 +- .../core/query/NativeSearchQueryBuilder.java | 2 +- .../data/elasticsearch/core/query/Query.java | 8 - .../elasticsearch/core/query/SearchQuery.java | 2 +- .../EnableElasticsearchRepositories.java | 2 +- .../query/ElasticsearchPartQuery.java | 3 +- src/main/resources/log4j2.xml | 13 + .../data/elasticsearch/InnerObjectTests.java | 4 +- .../data/elasticsearch/NestedObjectTests.java | 11 +- .../data/elasticsearch/SampleEntity.java | 139 --------- .../elasticsearch/SampleEntityUUIDKeyed.java | 140 --------- .../data/elasticsearch/Utils.java | 34 +- .../ElasticsearchNamespaceHandlerTests.java | 7 - .../EnableElasticsearchRepositoriesTests.java | 3 +- ...eNestedElasticsearchRepositoriesTests.java | 3 +- .../core/CustomEntityMapper.java | 4 +- .../core/DefaultResultMapperTests.java | 2 +- ...ElasticsearchTemplateParentChildTests.java | 3 +- .../core/ElasticsearchTemplateTests.java | 295 +++++++----------- .../core/MappingBuilderTests.java | 27 +- .../SimpleElasticsearchDateMappingTests.java | 2 +- ...ElasticsearchTemplateAggregationTests.java | 10 +- .../completion/AnnotatedCompletionEntity.java | 4 +- .../AnnotatedCompletionEntityBuilder.java | 15 +- .../completion/CompletionAnnotatedEntity.java | 4 +- .../core/completion/CompletionEntity.java | 2 +- .../CompletionEntityAnnotatedBuilder.java | 18 +- .../completion/CompletionEntityBuilder.java | 14 +- .../ElasticsearchTemplateCompletionTests.java | 117 +++---- .../core/facet/ArticleEntity.java | 18 +- .../ElasticsearchTemplateFacetTests.java | 48 ++- ...sticsearchTemplateHistogramFacetTests.java | 10 +- .../elasticsearch/core/facet/LogEntity.java | 2 +- .../core/geo/AuthorMarkerEntity.java | 2 +- .../geo/ElasticsearchTemplateGeoTests.java | 96 +++--- .../core/geo/LocationMarkerEntity.java | 23 +- .../core/query/CriteriaQueryTests.java | 3 +- .../entities/AbstractInheritedEntity.java | 3 +- .../data/elasticsearch/entities/Book.java | 2 +- .../entities/DoubleIDEntity.java | 4 +- .../DynamicSettingAndMappingEntity.java | 2 +- .../entities/FieldDynamicMappingEntity.java | 2 +- .../elasticsearch/entities/GeoEntity.java | 2 +- .../data/elasticsearch/entities/Group.java | 2 +- .../entities/IntegerIDEntity.java | 4 +- .../elasticsearch/entities/MinimalEntity.java | 2 +- .../elasticsearch/entities/ParentEntity.java | 6 +- .../data/elasticsearch/entities/Person.java | 2 +- .../entities/PersonMultipleLevelNested.java | 2 +- .../data/elasticsearch/entities/Product.java | 2 +- .../entities/SampleDateMappingEntity.java | 6 +- .../elasticsearch/entities/SampleEntity.java | 13 +- .../entities/SampleEntityUUIDKeyed.java | 3 + .../entities/SampleInheritedEntity.java | 7 +- .../entities/SampleMappingEntity.java | 9 +- .../entities/SampleTransientEntity.java | 7 +- .../entities/SimpleRecursiveEntity.java | 2 +- .../elasticsearch/entities/SpELEntity.java | 2 +- .../elasticsearch/entities/StockPrice.java | 2 +- .../elasticsearch/entities/SynonymEntity.java | 2 +- .../data/elasticsearch/entities/User.java | 2 +- .../immutable/ImmutableEntity.java | 2 +- .../repositories/cdi/CdiRepositoryTests.java | 1 + .../cdi/ElasticsearchTemplateProducer.java | 13 +- .../index/CreateIndexFalseEntity.java | 2 +- ...ettingAndMappingEntityRepositoryTests.java | 6 +- ...ldDynamicMappingEntityRepositoryTests.java | 4 +- ...stomMethodRepositoryManualWiringTests.java | 1 + .../support/DoubleIDRepositoryTests.java | 1 + .../support/IntegerIDRepositoryTests.java | 1 + .../SimpleElasticsearchRepositoryTests.java | 25 +- .../UUIDElasticsearchRepositoryTests.java | 17 +- .../mappings/test-field-mappings.json | 4 +- .../resources/node-client-configuration.yml | 2 +- .../repository-test-nested-object-books.xml | 17 + src/test/resources/synonyms/mappings.json | 2 +- .../antlr4-runtime-4.5.1-1.jar | Bin 0 -> 302034 bytes .../modules/lang-expression/asm-5.0.4.jar | Bin 0 -> 53297 bytes .../lang-expression/asm-commons-5.0.4.jar | Bin 0 -> 41796 bytes .../lang-expression/asm-tree-5.0.4.jar | Bin 0 -> 29050 bytes .../lang-expression/lang-expression-5.2.1.jar | Bin 0 -> 47124 bytes .../lucene-expressions-6.4.1.jar | Bin 0 -> 73459 bytes .../plugin-descriptor.properties | 40 +++ .../lang-expression/plugin-security.policy | 32 ++ .../modules/lang-groovy/lang-groovy-2.4.0.jar | Bin 16148 -> 0 bytes .../modules/lang-groovy/lang-groovy-5.2.1.jar | Bin 0 -> 18104 bytes .../lang-groovy/plugin-descriptor.properties | 62 +--- .../lang-groovy/plugin-security.policy | 7 +- template.mf | 2 +- 114 files changed, 1021 insertions(+), 1375 deletions(-) create mode 100644 src/main/java/org/springframework/data/elasticsearch/core/ScrolledPage.java create mode 100644 src/main/resources/log4j2.xml delete mode 100644 src/test/java/org/springframework/data/elasticsearch/SampleEntity.java delete mode 100644 src/test/java/org/springframework/data/elasticsearch/SampleEntityUUIDKeyed.java create mode 100644 src/test/resources/repository-test-nested-object-books.xml create mode 100644 src/test/resources/test-home-dir/modules/lang-expression/antlr4-runtime-4.5.1-1.jar create mode 100644 src/test/resources/test-home-dir/modules/lang-expression/asm-5.0.4.jar create mode 100644 src/test/resources/test-home-dir/modules/lang-expression/asm-commons-5.0.4.jar create mode 100644 src/test/resources/test-home-dir/modules/lang-expression/asm-tree-5.0.4.jar create mode 100644 src/test/resources/test-home-dir/modules/lang-expression/lang-expression-5.2.1.jar create mode 100644 src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-6.4.1.jar create mode 100644 src/test/resources/test-home-dir/modules/lang-expression/plugin-descriptor.properties create mode 100644 src/test/resources/test-home-dir/modules/lang-expression/plugin-security.policy delete mode 100644 src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-2.4.0.jar create mode 100644 src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-5.2.1.jar diff --git a/.gitignore b/.gitignore index 20068080e..2b6ba3019 100644 --- a/.gitignore +++ b/.gitignore @@ -6,9 +6,6 @@ atlassian-ide-plugin.xml ## ignore any target dir target -##ignore only top level data dir - local node data files for unit tests -/data - ## Ignore project files created by Eclipse .settings .project diff --git a/pom.xml b/pom.xml index 882c72d0d..23cf15a6f 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 3.2.1 2.6 - 2.4.0 + 5.2.1 2.0.0.BUILD-SNAPSHOT @@ -70,6 +70,30 @@ ${elasticsearch} + + org.elasticsearch.client + transport + ${elasticsearch} + + + commons-logging + commons-logging + + + + + + org.slf4j + log4j-over-slf4j + 1.7.22 + + + + org.apache.logging.log4j + log4j-core + 2.6.2 + + com.fasterxml.jackson.core @@ -96,6 +120,12 @@ org.springframework spring-test test + + + ch.qos.logback + logback-classic + + org.apache.openwebbeans.test @@ -120,6 +150,13 @@ test + + org.elasticsearch.plugin + transport-netty4-client + ${elasticsearch} + + + org.projectlombok lombok @@ -127,6 +164,8 @@ test + + diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/CompletionField.java b/src/main/java/org/springframework/data/elasticsearch/annotations/CompletionField.java index 4d8418fcf..7176d23b1 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/CompletionField.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/CompletionField.java @@ -32,8 +32,6 @@ public @interface CompletionField { String analyzer() default "simple"; - boolean payloads() default false; - boolean preserveSeparators() default true; boolean preservePositionIncrements() default true; diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/Field.java b/src/main/java/org/springframework/data/elasticsearch/annotations/Field.java index 29dcdf2f1..380ae0cad 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/Field.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/Field.java @@ -38,7 +38,7 @@ public @interface Field { FieldType type() default FieldType.Auto; - FieldIndex index() default FieldIndex.analyzed; + boolean index() default true; DateFormat format() default DateFormat.none; @@ -46,6 +46,8 @@ public @interface Field { boolean store() default false; + boolean fielddata() default false; + String searchAnalyzer() default ""; String analyzer() default ""; diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/FieldType.java b/src/main/java/org/springframework/data/elasticsearch/annotations/FieldType.java index 1916e93ef..ceaa6ce94 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/FieldType.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/FieldType.java @@ -21,5 +21,5 @@ package org.springframework.data.elasticsearch.annotations; * @author Artur Konczak */ public enum FieldType { - String, Integer, Long, Date, Float, Double, Boolean, Object, Auto, Nested, Ip, Attachment + text, Integer, Long, Date, Float, Double, Boolean, Object, Auto, Nested, Ip, Attachment, keyword } diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/GeoPointField.java b/src/main/java/org/springframework/data/elasticsearch/annotations/GeoPointField.java index f38263da3..bdb8025bb 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/GeoPointField.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/GeoPointField.java @@ -25,8 +25,4 @@ import java.lang.annotation.*; @Documented public @interface GeoPointField { - boolean geoHashPrefix() default false; - - String geoHashPrecision() default "0"; - } diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/InnerField.java b/src/main/java/org/springframework/data/elasticsearch/annotations/InnerField.java index cae53e834..ee850d8fe 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/InnerField.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/InnerField.java @@ -31,10 +31,12 @@ public @interface InnerField { FieldType type(); - FieldIndex index() default FieldIndex.analyzed; + boolean index() default true; boolean store() default false; + boolean fielddata() default false; + String searchAnalyzer() default ""; String indexAnalyzer() default ""; 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 fc8dd2597..b17c748f5 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/NodeClientFactoryBean.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/NodeClientFactoryBean.java @@ -1,127 +1,144 @@ -/* - * Copyright 2015 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.elasticsearch.node.NodeBuilder.*; - -import java.io.InputStream; -import org.apache.commons.lang.StringUtils; -import org.elasticsearch.client.Client; -import org.elasticsearch.client.node.NodeClient; -import org.elasticsearch.common.settings.Settings; -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; - -/** - * NodeClientFactoryBean - * - * @author Rizwan Idrees - * @author Mohsin Husen - */ - -public class NodeClientFactoryBean implements FactoryBean, InitializingBean, DisposableBean { - - private static final Logger logger = LoggerFactory.getLogger(NodeClientFactoryBean.class); - private boolean local; - private boolean enableHttp; - private String clusterName; - private NodeClient nodeClient; - private String pathData; - private String pathHome; - private String pathConfiguration; - - NodeClientFactoryBean() { - } - - public NodeClientFactoryBean(boolean local) { - this.local = local; - } - - @Override - public NodeClient getObject() throws Exception { - return nodeClient; - } - - @Override - public Class getObjectType() { - return NodeClient.class; - } - - @Override - public boolean isSingleton() { - return true; - } - - @Override - public void afterPropertiesSet() throws Exception { - nodeClient = (NodeClient) nodeBuilder().settings(Settings.builder().put(loadConfig()) - .put("http.enabled", String.valueOf(this.enableHttp)) - .put("path.home", this.pathHome) - .put("path.data", this.pathData)) - .clusterName(this.clusterName).local(this.local).node() - .client(); - } - - private Settings loadConfig() { - if (StringUtils.isNotBlank(pathConfiguration)) { - InputStream stream = getClass().getClassLoader().getResourceAsStream(pathConfiguration); - if (stream != null) { - return Settings.builder().loadFromStream(pathConfiguration, getClass().getClassLoader().getResourceAsStream(pathConfiguration)).build(); - } - logger.error(String.format("Unable to read node configuration from file [%s]", pathConfiguration)); - } - return Settings.builder().build(); - } - - public void setLocal(boolean local) { - this.local = local; - } - - public void setEnableHttp(boolean enableHttp) { - this.enableHttp = enableHttp; - } - - public void setClusterName(String clusterName) { - this.clusterName = clusterName; - } - - public void setPathData(String pathData) { - this.pathData = pathData; - } - - public void setPathHome(String pathHome) { - this.pathHome = pathHome; - } - - public void setPathConfiguration(String configuration) { - this.pathConfiguration = configuration; - } - - @Override - public void destroy() throws Exception { - try { - logger.info("Closing elasticSearch client"); - if (nodeClient != null) { - nodeClient.close(); - } - } catch (final Exception e) { - logger.error("Error closing ElasticSearch client: ", e); - } - } -} +/* + * Copyright 2015-2017 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 java.io.IOException; +import java.io.InputStream; +import java.util.Collection; +import org.apache.commons.lang.StringUtils; +import org.elasticsearch.client.Client; +import org.elasticsearch.client.node.NodeClient; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.node.Node; +import org.elasticsearch.node.internal.InternalSettingsPreparer; +import org.elasticsearch.plugins.Plugin; +import org.elasticsearch.transport.Netty4Plugin; +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 static java.util.Arrays.*; + +/** + * NodeClientFactoryBean + * + * @author Rizwan Idrees + * @author Mohsin Husen + */ + +public class NodeClientFactoryBean implements FactoryBean, InitializingBean, DisposableBean { + + private static final Logger logger = LoggerFactory.getLogger(NodeClientFactoryBean.class); + private boolean local; + private boolean enableHttp; + private String clusterName; + private NodeClient nodeClient; + private String pathData; + private String pathHome; + private String pathConfiguration; + + public static class TestNode extends Node { + public TestNode(Settings preparedSettings, Collection> classpathPlugins) { + super(InternalSettingsPreparer.prepareEnvironment(preparedSettings, null), classpathPlugins); + } + } + + NodeClientFactoryBean() { + } + + public NodeClientFactoryBean(boolean local) { + this.local = local; + } + + @Override + public NodeClient getObject() throws Exception { + return nodeClient; + } + + @Override + public Class getObjectType() { + return NodeClient.class; + } + + @Override + public boolean isSingleton() { + return true; + } + + @Override + public void afterPropertiesSet() throws Exception { + + 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(); + } + + private Settings loadConfig() throws IOException { + if (StringUtils.isNotBlank(pathConfiguration)) { + InputStream stream = getClass().getClassLoader().getResourceAsStream(pathConfiguration); + if (stream != null) { + return Settings.builder().loadFromStream(pathConfiguration, getClass().getClassLoader().getResourceAsStream(pathConfiguration)).build(); + } + logger.error(String.format("Unable to read node configuration from file [%s]", pathConfiguration)); + } + return Settings.builder().build(); + } + + public void setLocal(boolean local) { + this.local = local; + } + + public void setEnableHttp(boolean enableHttp) { + this.enableHttp = enableHttp; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public void setPathData(String pathData) { + this.pathData = pathData; + } + + public void setPathHome(String pathHome) { + this.pathHome = pathHome; + } + + public void setPathConfiguration(String configuration) { + this.pathConfiguration = configuration; + } + + @Override + public void destroy() throws Exception { + try { + logger.info("Closing elasticSearch client"); + if (nodeClient != null) { + nodeClient.close(); + } + } catch (final Exception e) { + logger.error("Error closing ElasticSearch client: ", e); + } + } +} 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 881d0f8f9..b008bf63d 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/TransportClientFactoryBean.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/TransportClientFactoryBean.java @@ -23,6 +23,7 @@ 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; @@ -86,7 +87,8 @@ public class TransportClientFactoryBean implements FactoryBean, } protected void buildClient() throws Exception { - client = TransportClient.builder().settings(settings()).build(); + + client = new PreBuiltTransportClient(settings()); Assert.hasText(clusterNodes, "[Assertion failed] clusterNodes settings missing."); for (String clusterNode : split(clusterNodes, COMMA)) { String hostName = substringBeforeLast(clusterNode, COLON); diff --git a/src/main/java/org/springframework/data/elasticsearch/config/NodeClientBeanDefinitionParser.java b/src/main/java/org/springframework/data/elasticsearch/config/NodeClientBeanDefinitionParser.java index b2878040d..96cad2e1d 100644 --- a/src/main/java/org/springframework/data/elasticsearch/config/NodeClientBeanDefinitionParser.java +++ b/src/main/java/org/springframework/data/elasticsearch/config/NodeClientBeanDefinitionParser.java @@ -1,57 +1,57 @@ -/* - * Copyright 2015 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.config; - -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.data.elasticsearch.client.NodeClientFactoryBean; -import org.w3c.dom.Element; - -/** - * NodeClientBeanDefinitionParser - * - * @author Rizwan Idrees - * @author Mohsin Husen - */ - -public class NodeClientBeanDefinitionParser extends AbstractBeanDefinitionParser { - - @Override - protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(NodeClientFactoryBean.class); - setLocalSettings(element, builder); - return getSourcedBeanDefinition(builder, element, parserContext); - } - - private void setLocalSettings(Element element, BeanDefinitionBuilder builder) { - builder.addPropertyValue("local", Boolean.valueOf(element.getAttribute("local"))); - builder.addPropertyValue("clusterName", element.getAttribute("cluster-name")); - builder.addPropertyValue("enableHttp", Boolean.valueOf(element.getAttribute("http-enabled"))); - builder.addPropertyValue("pathData", element.getAttribute("path-data")); - builder.addPropertyValue("pathHome", element.getAttribute("path-home")); - builder.addPropertyValue("pathConfiguration", element.getAttribute("path-configuration")); - } - - private AbstractBeanDefinition getSourcedBeanDefinition(BeanDefinitionBuilder builder, Element source, - ParserContext context) { - AbstractBeanDefinition definition = builder.getBeanDefinition(); - definition.setSource(context.extractSource(source)); - return definition; - } -} +/* + * Copyright 2015 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.config; + +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.data.elasticsearch.client.NodeClientFactoryBean; +import org.w3c.dom.Element; + +/** + * NodeClientBeanDefinitionParser + * + * @author Rizwan Idrees + * @author Mohsin Husen + */ + +public class NodeClientBeanDefinitionParser extends AbstractBeanDefinitionParser { + + @Override + protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(NodeClientFactoryBean.class); + setLocalSettings(element, builder); + return getSourcedBeanDefinition(builder, element, parserContext); + } + + private void setLocalSettings(Element element, BeanDefinitionBuilder builder) { + builder.addPropertyValue("local", Boolean.valueOf(element.getAttribute("local"))); + builder.addPropertyValue("clusterName", element.getAttribute("cluster-name")); + builder.addPropertyValue("enableHttp", Boolean.valueOf(element.getAttribute("http-enabled"))); + builder.addPropertyValue("pathData", element.getAttribute("path-data")); + builder.addPropertyValue("pathHome", element.getAttribute("path-home")); + builder.addPropertyValue("pathConfiguration", element.getAttribute("path-configuration")); + } + + private AbstractBeanDefinition getSourcedBeanDefinition(BeanDefinitionBuilder builder, Element source, + ParserContext context) { + AbstractBeanDefinition definition = builder.getBeanDefinition(); + definition.setSource(context.extractSource(source)); + return definition; + } +} diff --git a/src/main/java/org/springframework/data/elasticsearch/core/CriteriaFilterProcessor.java b/src/main/java/org/springframework/data/elasticsearch/core/CriteriaFilterProcessor.java index 5efa974f8..971d6a403 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/CriteriaFilterProcessor.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/CriteriaFilterProcessor.java @@ -116,8 +116,8 @@ class CriteriaFilterProcessor { Object[] valArray = (Object[]) value; Assert.noNullElements(valArray, "Geo distance filter takes 2 not null elements array as parameter."); Assert.isTrue(valArray.length == 2, "Geo distance filter takes a 2-elements array as parameter."); - Assert.isTrue(valArray[0] instanceof GeoPoint || valArray[0] instanceof String || valArray[0] instanceof Point, "First element of a geo distance filter must be a GeoPoint, a Point or a String"); - Assert.isTrue(valArray[1] instanceof String || valArray[1] instanceof Distance, "Second element of a geo distance filter must be a String or a Distance"); + Assert.isTrue(valArray[0] instanceof GeoPoint || valArray[0] instanceof String || valArray[0] instanceof Point, "First element of a geo distance filter must be a GeoPoint, a Point or a text"); + Assert.isTrue(valArray[1] instanceof String || valArray[1] instanceof Distance, "Second element of a geo distance filter must be a text or a Distance"); StringBuilder dist = new StringBuilder(); @@ -129,15 +129,15 @@ class CriteriaFilterProcessor { if (valArray[0] instanceof GeoPoint) { GeoPoint loc = (GeoPoint) valArray[0]; - geoDistanceQueryBuilder.lat(loc.getLat()).lon(loc.getLon()).distance(dist.toString()).geoDistance(GeoDistance.PLANE); + geoDistanceQueryBuilder.point(loc.getLat(),loc.getLon()).distance(dist.toString()).geoDistance(GeoDistance.PLANE); } else if (valArray[0] instanceof Point) { GeoPoint loc = GeoPoint.fromPoint((Point) valArray[0]); - geoDistanceQueryBuilder.lat(loc.getLat()).lon(loc.getLon()).distance(dist.toString()).geoDistance(GeoDistance.PLANE); + geoDistanceQueryBuilder.point(loc.getLat(), loc.getLon()).distance(dist.toString()).geoDistance(GeoDistance.PLANE); } else { String loc = (String) valArray[0]; if (loc.contains(",")) { String c[] = loc.split(","); - geoDistanceQueryBuilder.lat(Double.parseDouble(c[0])).lon(Double.parseDouble(c[1])).distance(dist.toString()).geoDistance(GeoDistance.PLANE); + geoDistanceQueryBuilder.point(Double.parseDouble(c[0]), Double.parseDouble(c[1])).distance(dist.toString()).geoDistance(GeoDistance.PLANE); } else { geoDistanceQueryBuilder.geohash(loc).distance(dist.toString()).geoDistance(GeoDistance.PLANE); } @@ -159,7 +159,7 @@ class CriteriaFilterProcessor { oneParameterBBox((GeoBoundingBoxQueryBuilder) filter, valArray[0]); } else if (valArray.length == 2) { //2x GeoPoint - //2x String + //2x text twoParameterBBox((GeoBoundingBoxQueryBuilder) filter, valArray); } else { //error @@ -206,8 +206,7 @@ class CriteriaFilterProcessor { geoBBox = (GeoBox) value; } - filter.topLeft(geoBBox.getTopLeft().getLat(), geoBBox.getTopLeft().getLon()); - filter.bottomRight(geoBBox.getBottomRight().getLat(), geoBBox.getBottomRight().getLon()); + filter.setCorners(geoBBox.getTopLeft().getLat(), geoBBox.getTopLeft().getLon(), geoBBox.getBottomRight().getLat(), geoBBox.getBottomRight().getLon()); } private static boolean isType(Object[] array, Class clazz) { @@ -220,17 +219,15 @@ class CriteriaFilterProcessor { } private void twoParameterBBox(GeoBoundingBoxQueryBuilder filter, Object[] values) { - Assert.isTrue(isType(values, GeoPoint.class) || isType(values, String.class), " both elements of boundedBy filter must be type of GeoPoint or String(format lat,lon or geohash)"); + Assert.isTrue(isType(values, GeoPoint.class) || isType(values, String.class), " both elements of boundedBy filter must be type of GeoPoint or text(format lat,lon or geohash)"); if (values[0] instanceof GeoPoint) { GeoPoint topLeft = (GeoPoint) values[0]; GeoPoint bottomRight = (GeoPoint) values[1]; - filter.topLeft(topLeft.getLat(), topLeft.getLon()); - filter.bottomRight(bottomRight.getLat(), bottomRight.getLon()); + filter.setCorners(topLeft.getLat(), topLeft.getLon(), bottomRight.getLat(), bottomRight.getLon()); } else { String topLeft = (String) values[0]; String bottomRight = (String) values[1]; - filter.topLeft(topLeft); - filter.bottomRight(bottomRight); + filter.setCorners(topLeft, bottomRight); } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java b/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java index 1d743aba2..3bb735a83 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/CriteriaQueryProcessor.java @@ -15,6 +15,7 @@ */ package org.springframework.data.elasticsearch.core; +import static org.elasticsearch.index.query.Operator.AND; import static org.elasticsearch.index.query.QueryBuilders.*; import static org.springframework.data.elasticsearch.core.query.Criteria.*; @@ -24,10 +25,7 @@ import java.util.List; import java.util.ListIterator; import org.apache.lucene.queryparser.flexible.core.util.StringUtils; -import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.BoostableQueryBuilder; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.index.query.QueryStringQueryBuilder; +import org.elasticsearch.index.query.*; import org.springframework.data.elasticsearch.core.query.Criteria; import org.springframework.util.Assert; @@ -148,7 +146,7 @@ class CriteriaQueryProcessor { switch (key) { case EQUALS: - query = queryStringQuery(searchText).field(fieldName).defaultOperator(QueryStringQueryBuilder.Operator.AND); + query = queryStringQuery(searchText).field(fieldName).defaultOperator(AND); break; case CONTAINS: query = queryStringQuery("*" + searchText + "*").field(fieldName).analyzeWildcard(true); @@ -203,8 +201,6 @@ class CriteriaQueryProcessor { if (Float.isNaN(boost)) { return; } - if (query instanceof BoostableQueryBuilder) { - ((BoostableQueryBuilder) query).boost(boost); - } + query.boost(boost); } } 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 d64216906..d19f4637d 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java @@ -94,7 +94,7 @@ public class DefaultResultMapper extends AbstractResultMapper { } } - return new AggregatedPageImpl<>(results, pageable, totalHits, response.getAggregations()); + return new AggregatedPageImpl(results, pageable, totalHits, response.getAggregations(), response.getScrollId()); } private void populateScriptFields(T result, SearchHit hit) { diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java index 26a1dda34..dd877e8fd 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java @@ -18,6 +18,7 @@ package org.springframework.data.elasticsearch.core; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.Client; import org.elasticsearch.cluster.metadata.AliasMetaData; +import org.elasticsearch.common.Nullable; import org.springframework.data.domain.Page; import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter; import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity; @@ -480,79 +481,52 @@ public interface ElasticsearchOperations { void refresh(Class clazz); /** - * Returns scroll id for criteria query - * - * @param query The criteria query. - * @param scrollTimeInMillis The time in millisecond for scroll feature - * {@link org.elasticsearch.action.search.SearchRequestBuilder#setScroll(org.elasticsearch.common.unit.TimeValue)}. - * @param noFields The no fields support - * {@link org.elasticsearch.action.search.SearchRequestBuilder#setNoFields()}. - * @return The scan id for input query. - */ - String scan(CriteriaQuery query, long scrollTimeInMillis, boolean noFields); - - /** - * Returns scroll id for criteria query - * - * @param query The criteria query. - * @param scrollTimeInMillis The time in millisecond for scroll feature - * {@link org.elasticsearch.action.search.SearchRequestBuilder#setScroll(org.elasticsearch.common.unit.TimeValue)}. - * @param noFields The no fields support - * {@link org.elasticsearch.action.search.SearchRequestBuilder#setNoFields()}. - * @param clazz The class of entity to retrieve. - * @param The type of entity to retrieve. - * @return The scan id for input query. - */ - String scan(CriteriaQuery query, long scrollTimeInMillis, boolean noFields, Class clazz); - - /** - * Returns scroll id for scan query + * Returns scrolled page for given query * * @param query The search query. * @param scrollTimeInMillis The time in millisecond for scroll feature * {@link org.elasticsearch.action.search.SearchRequestBuilder#setScroll(org.elasticsearch.common.unit.TimeValue)}. - * @param noFields The no fields support - * {@link org.elasticsearch.action.search.SearchRequestBuilder#setNoFields()}. + * @param clazz The class of entity to retrieve. * @return The scan id for input query. */ - String scan(SearchQuery query, long scrollTimeInMillis, boolean noFields); + Page startScroll(long scrollTimeInMillis, SearchQuery query, Class clazz); /** - * Returns scroll id for scan query + * Returns scrolled page for given query * * @param query The search query. * @param scrollTimeInMillis The time in millisecond for scroll feature * {@link org.elasticsearch.action.search.SearchRequestBuilder#setScroll(org.elasticsearch.common.unit.TimeValue)}. - * @param noFields The no fields support - * {@link org.elasticsearch.action.search.SearchRequestBuilder#setNoFields()}. - * @param clazz The class of entity to retrieve. - * @param The type of entity to retrieve. + * @param mapper Custom impl to map result to entities * @return The scan id for input query. */ - String scan(SearchQuery query, long scrollTimeInMillis, boolean noFields, Class clazz); + Page startScroll(long scrollTimeInMillis, SearchQuery query, Class clazz, SearchResultMapper mapper); /** - * Scrolls the results for give scroll id + * Returns scrolled page for given query * - * @param scrollId - * @param scrollTimeInMillis - * @param clazz - * @param - * @return + * @param criteriaQuery The search query. + * @param scrollTimeInMillis The time in millisecond for scroll feature + * {@link org.elasticsearch.action.search.SearchRequestBuilder#setScroll(org.elasticsearch.common.unit.TimeValue)}. + * @param clazz The class of entity to retrieve. + * @return The scan id for input query. */ - Page scroll(String scrollId, long scrollTimeInMillis, Class clazz); + Page startScroll(long scrollTimeInMillis, CriteriaQuery criteriaQuery, Class clazz); /** - * Scrolls the results for give scroll id using custom result mapper + * Returns scrolled page for given query * - * @param scrollId - * @param scrollTimeInMillis - * @param mapper - * @param - * @return + * @param criteriaQuery The search query. + * @param scrollTimeInMillis The time in millisecond for scroll feature + * {@link org.elasticsearch.action.search.SearchRequestBuilder#setScroll(org.elasticsearch.common.unit.TimeValue)}. + * @param mapper Custom impl to map result to entities + * @return The scan id for input query. */ - Page scroll(String scrollId, long scrollTimeInMillis, SearchResultMapper mapper); + Page startScroll(long scrollTimeInMillis, CriteriaQuery criteriaQuery, Class clazz, SearchResultMapper mapper); + + Page continueScroll(@Nullable String scrollId, long scrollTimeInMillis, Class clazz); + Page continueScroll(@Nullable String scrollId, long scrollTimeInMillis, Class clazz, SearchResultMapper mapper); /** * Clears the search contexts associated with specified scroll ids. * 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 8a8872e49..84138fa99 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -15,19 +15,11 @@ */ package org.springframework.data.elasticsearch.core; -import static org.apache.commons.lang.StringUtils.*; -import static org.elasticsearch.action.search.SearchType.*; -import static org.elasticsearch.client.Requests.*; -import static org.elasticsearch.cluster.metadata.AliasAction.Type.*; -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; - 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; @@ -35,8 +27,8 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.Optional; - import org.elasticsearch.action.ListenableActionFuture; +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; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; @@ -46,7 +38,6 @@ import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest; import org.elasticsearch.action.bulk.BulkItemResponse; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; -import org.elasticsearch.action.count.CountRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.get.MultiGetRequest; import org.elasticsearch.action.get.MultiGetRequestBuilder; @@ -54,15 +45,12 @@ import org.elasticsearch.action.get.MultiGetResponse; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.action.search.SearchType; -import org.elasticsearch.action.suggest.SuggestRequestBuilder; -import org.elasticsearch.action.suggest.SuggestResponse; import org.elasticsearch.action.update.UpdateRequestBuilder; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.Requests; -import org.elasticsearch.cluster.metadata.AliasAction; import org.elasticsearch.cluster.metadata.AliasMetaData; +import org.elasticsearch.common.Nullable; import org.elasticsearch.common.collect.MapBuilder; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -71,7 +59,7 @@ import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; -import org.elasticsearch.search.highlight.HighlightBuilder; +import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.sort.SortBuilder; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.search.suggest.SuggestBuilder; @@ -100,6 +88,12 @@ 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 @@ -315,7 +309,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati @Override public List queryForIds(SearchQuery query) { - SearchRequestBuilder request = prepareSearch(query).setQuery(query.getQuery()).setNoFields(); + SearchRequestBuilder request = prepareSearch(query).setQuery(query.getQuery()); if (query.getFilter() != null) { request.setPostFilter(query.getFilter()); } @@ -357,15 +351,14 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati @Override public Page queryForPage(StringQuery query, Class clazz, SearchResultMapper mapper) { - SearchResponse response = getSearchResponse(prepareSearch(query, clazz).setQuery(query.getSource()).execute()); + SearchResponse response = getSearchResponse(prepareSearch(query, clazz).setQuery(wrapperQuery(query.getSource())).execute()); return mapper.mapResults(response, clazz, query.getPageable()); } @Override public CloseableIterator stream(CriteriaQuery query, Class clazz) { final long scrollTimeInMillis = TimeValue.timeValueMinutes(1).millis(); - final String initScrollId = scan(query, scrollTimeInMillis, false, clazz); - return doStream(initScrollId, scrollTimeInMillis, clazz, resultsMapper); + return doStream(scrollTimeInMillis, (ScrolledPage) startScroll(scrollTimeInMillis, query, clazz), clazz, resultsMapper); } @Override @@ -376,29 +369,27 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati @Override public CloseableIterator stream(SearchQuery query, final Class clazz, final SearchResultMapper mapper) { final long scrollTimeInMillis = TimeValue.timeValueMinutes(1).millis(); - final String initScrollId = scan(query, scrollTimeInMillis, false, clazz); - return doStream(initScrollId, scrollTimeInMillis, clazz, mapper); + return doStream(scrollTimeInMillis, (ScrolledPage) startScroll(scrollTimeInMillis, query, clazz, mapper), clazz, mapper); } - private CloseableIterator doStream(final String initScrollId, final long scrollTimeInMillis, - final Class clazz, final SearchResultMapper mapper) { + private CloseableIterator doStream(final long scrollTimeInMillis, final ScrolledPage page, final Class clazz, final SearchResultMapper mapper) { return new CloseableIterator() { /** As we couldn't retrieve single result with scroll, store current hits. */ - private volatile Iterator currentHits; + private volatile Iterator currentHits = page.iterator(); /** The scroll id. */ - private volatile String scrollId = initScrollId; + private volatile String scrollId = page.getScrollId(); /** If stream is finished (ie: cluster returns no results. */ - private volatile boolean finished; + private volatile boolean finished = !currentHits.hasNext(); @Override public void close() { try { // Clear scroll on cluster only in case of error (cause elasticsearch auto clear scroll when it's done) if (!finished && scrollId != null && currentHits != null && currentHits.hasNext()) { - client.prepareClearScroll().addScrollId(scrollId).execute().actionGet(); + clearScroll(scrollId); } } finally { currentHits = null; @@ -415,12 +406,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati // Test if it remains hits if (currentHits == null || !currentHits.hasNext()) { // Do a new request - SearchResponse response = getSearchResponse( - client.prepareSearchScroll(scrollId).setScroll(TimeValue.timeValueMillis(scrollTimeInMillis)).execute()); + final ScrolledPage scroll = (ScrolledPage) continueScroll(scrollId, scrollTimeInMillis, clazz, mapper); // Save hits and scroll id - currentHits = mapper.mapResults(response, clazz, Pageable.unpaged()).iterator(); + currentHits = scroll.iterator(); finished = !currentHits.hasNext(); - scrollId = response.getScrollId(); + scrollId = scroll.getScrollId(); } return currentHits.hasNext(); } @@ -477,11 +467,12 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati return count(query, null); } - private long doCount(CountRequestBuilder countRequestBuilder, QueryBuilder elasticsearchQuery) { + private long doCount(SearchRequestBuilder countRequestBuilder, QueryBuilder elasticsearchQuery) { + if (elasticsearchQuery != null) { countRequestBuilder.setQuery(elasticsearchQuery); } - return countRequestBuilder.execute().actionGet().getCount(); + return countRequestBuilder.execute().actionGet().getHits().getTotalHits(); } private long doCount(SearchRequestBuilder searchRequestBuilder, QueryBuilder elasticsearchQuery, @@ -494,11 +485,10 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati if (elasticsearchFilter != null) { searchRequestBuilder.setPostFilter(elasticsearchFilter); } - searchRequestBuilder.setSearchType(SearchType.COUNT); return searchRequestBuilder.execute().actionGet().getHits().getTotalHits(); } - private CountRequestBuilder prepareCount(Query query, Class clazz) { + private SearchRequestBuilder prepareCount(Query query, Class clazz) { String indexName[] = !isEmpty(query.getIndices()) ? query.getIndices().toArray(new String[query.getIndices().size()]) : retrieveIndexNameFromPersistentEntity(clazz); @@ -507,11 +497,12 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati Assert.notNull(indexName, "No index defined for Query"); - CountRequestBuilder countRequestBuilder = client.prepareCount(indexName); + SearchRequestBuilder countRequestBuilder = client.prepareSearch(indexName); if (types != null) { countRequestBuilder.setTypes(types); } + countRequestBuilder.setSize(0); return countRequestBuilder; } @@ -533,6 +524,10 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati MultiGetRequestBuilder builder = client.prepareMultiGet(); + if (searchQuery.getFields() != null && !searchQuery.getFields().isEmpty()) { + searchQuery.addSourceFilter(new FetchSourceFilter(toArray(searchQuery.getFields()), null)); + } + for (String id : searchQuery.getIds()) { MultiGetRequest.Item item = new MultiGetRequest.Item(indexName, type, id); @@ -541,9 +536,6 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati item = item.routing(searchQuery.getRoute()); } - if (searchQuery.getFields() != null && !searchQuery.getFields().isEmpty()) { - item = item.fields(toArray(searchQuery.getFields())); - } builder.add(item); } return builder.execute().actionGet(); @@ -602,18 +594,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati for (IndexQuery query : queries) { bulkRequest.add(prepareIndex(query)); } - BulkResponse bulkResponse = bulkRequest.execute().actionGet(); - if (bulkResponse.hasFailures()) { - Map failedDocuments = new HashMap<>(); - for (BulkItemResponse item : bulkResponse.getItems()) { - if (item.isFailed()) - failedDocuments.put(item.getId(), item.getFailureMessage()); - } - throw new ElasticsearchException( - "Bulk indexing has failures. Use ElasticsearchException.getFailedDocuments() for detailed messages [" - + failedDocuments + "]", - failedDocuments); - } + checkForBulkUpdateFailure(bulkRequest.execute().actionGet()); } @Override @@ -622,7 +603,10 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati for (UpdateQuery query : queries) { bulkRequest.add(prepareUpdate(query)); } - BulkResponse bulkResponse = bulkRequest.execute().actionGet(); + checkForBulkUpdateFailure(bulkRequest.execute().actionGet()); + } + + private void checkForBulkUpdateFailure(BulkResponse bulkResponse) { if (bulkResponse.hasFailures()) { Map failedDocuments = new HashMap<>(); for (BulkItemResponse item : bulkResponse.getItems()) { @@ -691,32 +675,29 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(deleteQuery.getQuery()).withIndices(indexName) .withTypes(typeName).withPageable(PageRequest.of(0, pageSize)).build(); - String scrollId = scan(searchQuery, scrollTimeInMillis, true); - - BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); - List ids = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = scroll(scrollId, scrollTimeInMillis, new SearchResultMapper() { - @Override - public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { - List result = new ArrayList<>(); - for (SearchHit searchHit : response.getHits()) { - String id = searchHit.getId(); - result.add(id); - } - if (result.size() > 0) { - return new AggregatedPageImpl<>((List) result); - } - return null; + SearchResultMapper onlyIdResultMapper = new SearchResultMapper() { + @Override + public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { + List result = new ArrayList(); + for (SearchHit searchHit : response.getHits().getHits()) { + String id = searchHit.getId(); + result.add(id); } - }); - if (page != null && page.getContent().size() > 0) { - ids.addAll(page.getContent()); - } else { - hasRecords = false; + if (result.size() > 0) { + return new AggregatedPageImpl((List) result, response.getScrollId()); + } + return new AggregatedPageImpl(Collections.EMPTY_LIST, response.getScrollId()); } - } + }; + + Page scrolledResult = startScroll(scrollTimeInMillis, searchQuery, String.class, onlyIdResultMapper); + BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); + List ids = new ArrayList(); + + do { + ids.addAll(scrolledResult.getContent()); + scrolledResult = continueScroll(((ScrolledPage)scrolledResult).getScrollId(), scrollTimeInMillis, String.class, onlyIdResultMapper); + } while(scrolledResult.getContent().size() != 0); for (String id : ids) { bulkRequestBuilder.add(client.prepareDelete(indexName, typeName, id)); @@ -726,7 +707,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati bulkRequestBuilder.execute().actionGet(); } - clearScroll(scrollId); + clearScroll(((ScrolledPage) scrolledResult).getScrollId()); } @Override @@ -745,33 +726,13 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati delete(deleteQuery, clazz); } - @Override - public String scan(CriteriaQuery criteriaQuery, long scrollTimeInMillis, boolean noFields) { - return doScan(prepareScan(criteriaQuery, scrollTimeInMillis, noFields), criteriaQuery); - } - - @Override - public String scan(CriteriaQuery criteriaQuery, long scrollTimeInMillis, boolean noFields, Class clazz) { - return doScan(prepareScan(criteriaQuery, scrollTimeInMillis, noFields, clazz), criteriaQuery); - } - - @Override - public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) { - return doScan(prepareScan(searchQuery, scrollTimeInMillis, noFields), searchQuery); - } - - @Override - public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields, Class clazz) { - return doScan(prepareScan(searchQuery, scrollTimeInMillis, noFields, clazz), searchQuery); - } - - private SearchRequestBuilder prepareScan(Query query, long scrollTimeInMillis, boolean noFields, Class clazz) { + private SearchRequestBuilder prepareScroll(Query query, long scrollTimeInMillis, Class clazz) { setPersistentEntityIndexAndType(query, clazz); - return prepareScan(query, scrollTimeInMillis, noFields); + return prepareScroll(query, scrollTimeInMillis); } - private SearchRequestBuilder prepareScan(Query query, long scrollTimeInMillis, boolean noFields) { - SearchRequestBuilder requestBuilder = client.prepareSearch(toArray(query.getIndices())).setSearchType(SCAN) + private SearchRequestBuilder prepareScroll(Query query, long scrollTimeInMillis) { + SearchRequestBuilder requestBuilder = client.prepareSearch(toArray(query.getIndices())) .setTypes(toArray(query.getTypes())).setScroll(TimeValue.timeValueMillis(scrollTimeInMillis)).setFrom(0); if(query.getPageable().isPaged()){ @@ -779,16 +740,12 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati } if (!isEmpty(query.getFields())) { - requestBuilder.addFields(toArray(query.getFields())); - } - - if (noFields) { - requestBuilder.setNoFields(); + requestBuilder.setFetchSource(toArray(query.getFields()), null); } return requestBuilder; } - private String doScan(SearchRequestBuilder requestBuilder, CriteriaQuery criteriaQuery) { + private SearchResponse doScroll(SearchRequestBuilder requestBuilder, CriteriaQuery criteriaQuery) { Assert.notNull(criteriaQuery.getIndices(), "No index defined for Query"); Assert.notNull(criteriaQuery.getTypes(), "No type define for Query"); Assert.notNull(criteriaQuery.getPageable(), "Query.pageable is required for scan & scroll"); @@ -807,10 +764,10 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati requestBuilder.setPostFilter(elasticsearchFilter); } - return getSearchResponse(requestBuilder.execute()).getScrollId(); + return getSearchResponse(requestBuilder.execute()); } - private String doScan(SearchRequestBuilder requestBuilder, SearchQuery searchQuery) { + private SearchResponse doScroll(SearchRequestBuilder requestBuilder, SearchQuery searchQuery) { Assert.notNull(searchQuery.getIndices(), "No index defined for Query"); Assert.notNull(searchQuery.getTypes(), "No type define for Query"); Assert.notNull(searchQuery.getPageable(), "Query.pageable is required for scan & scroll"); @@ -819,21 +776,39 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati requestBuilder.setPostFilter(searchQuery.getFilter()); } - return getSearchResponse(requestBuilder.setQuery(searchQuery.getQuery()).execute()).getScrollId(); + return getSearchResponse(requestBuilder.setQuery(searchQuery.getQuery()).execute()); } - @Override - public Page scroll(String scrollId, long scrollTimeInMillis, Class clazz) { - SearchResponse response = getSearchResponse( - client.prepareSearchScroll(scrollId).setScroll(TimeValue.timeValueMillis(scrollTimeInMillis)).execute()); + public Page startScroll(long scrollTimeInMillis, SearchQuery searchQuery, Class clazz) { + SearchResponse response = doScroll(prepareScroll(searchQuery, scrollTimeInMillis, clazz), searchQuery); + return resultsMapper.mapResults(response, clazz, null); + } + + public Page startScroll(long scrollTimeInMillis, CriteriaQuery criteriaQuery, Class clazz) { + SearchResponse response = doScroll(prepareScroll(criteriaQuery, scrollTimeInMillis, clazz), criteriaQuery); + return resultsMapper.mapResults(response, clazz, null); + } + + public Page startScroll(long scrollTimeInMillis, SearchQuery searchQuery, Class clazz, SearchResultMapper mapper) { + SearchResponse response = doScroll(prepareScroll(searchQuery, scrollTimeInMillis, clazz), searchQuery); + return mapper.mapResults(response, clazz, null); + } + + public Page startScroll(long scrollTimeInMillis, CriteriaQuery criteriaQuery, Class clazz, SearchResultMapper mapper) { + SearchResponse response = doScroll(prepareScroll(criteriaQuery, scrollTimeInMillis, clazz), criteriaQuery); + return mapper.mapResults(response, clazz, null); + } + + public Page continueScroll(@Nullable String scrollId, long scrollTimeInMillis, Class clazz) { + SearchResponse response = getSearchResponse(client.prepareSearchScroll(scrollId) + .setScroll(TimeValue.timeValueMillis(scrollTimeInMillis)).execute()); return resultsMapper.mapResults(response, clazz, Pageable.unpaged()); } - @Override - public Page scroll(String scrollId, long scrollTimeInMillis, SearchResultMapper mapper) { - SearchResponse response = getSearchResponse( - client.prepareSearchScroll(scrollId).setScroll(TimeValue.timeValueMillis(scrollTimeInMillis)).execute()); - return mapper.mapResults(response, null, Pageable.unpaged()); + public Page continueScroll(@Nullable String scrollId, long scrollTimeInMillis, Class clazz, SearchResultMapper mapper) { + SearchResponse response = getSearchResponse(client.prepareSearchScroll(scrollId) + .setScroll(TimeValue.timeValueMillis(scrollTimeInMillis)).execute()); + return mapper.mapResults(response, clazz, Pageable.unpaged()); } @Override @@ -852,8 +827,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati Assert.notNull(type, "No 'type' defined for MoreLikeThisQuery"); Assert.notNull(query.getId(), "No document id defined for MoreLikeThisQuery"); - MoreLikeThisQueryBuilder moreLikeThisQueryBuilder = moreLikeThisQuery() - .addLikeItem(new MoreLikeThisQueryBuilder.Item(indexName, type, query.getId())); + + MoreLikeThisQueryBuilder moreLikeThisQueryBuilder = moreLikeThisQuery(toArray(new MoreLikeThisQueryBuilder.Item(indexName, type, query.getId()))); if (query.getMinTermFreq() != null) { moreLikeThisQueryBuilder.minTermFreq(query.getMinTermFreq()); @@ -895,7 +870,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati } if (!searchQuery.getScriptFields().isEmpty()) { - searchRequest.addField("_source"); + //_source should be return all the time + //searchRequest.addStoredField("_source"); for (ScriptField scriptedField : searchQuery.getScriptFields()) { searchRequest.addScriptField(scriptedField.fieldName(), scriptedField.script()); } @@ -903,7 +879,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati if (searchQuery.getHighlightFields() != null) { for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) { - searchRequest.addHighlightedField(highlightField); + searchRequest.highlighter(new HighlightBuilder().field(highlightField)); } } @@ -1016,7 +992,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati searchRequestBuilder.setFrom(startRecord); if (!query.getFields().isEmpty()) { - searchRequestBuilder.addFields(toArray(query.getFields())); + searchRequestBuilder.setFetchSource(toArray(query.getFields()),null); } if (query.getSort() != null) { @@ -1086,7 +1062,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"); - AliasAction aliasAction = new AliasAction(ADD, query.getIndexName(), query.getAliasName()); + final IndicesAliasesRequest.AliasActions aliasAction = IndicesAliasesRequest.AliasActions.add().alias(query.getAliasName()).index(query.getIndexName()); + if (query.getFilterBuilder() != null) { aliasAction.filter(query.getFilterBuilder()); } else if (query.getFilter() != null) { @@ -1135,7 +1112,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(entity.getClass()); Optional idProperty = persistentEntity.getIdProperty(); - // Only deal with String because ES generated Ids are strings ! + // Only deal with text because ES generated Ids are strings ! idProperty.ifPresent(property -> { @@ -1190,6 +1167,10 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati return values.toArray(valuesAsArray); } + private static MoreLikeThisQueryBuilder.Item[] toArray(MoreLikeThisQueryBuilder.Item... values) { + return values; + } + protected ResultsMapper getResultsMapper() { return resultsMapper; } @@ -1224,13 +1205,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati return stringBuilder.toString(); } - public SuggestResponse suggest(SuggestBuilder.SuggestionBuilder suggestion, String... indices) { - SuggestRequestBuilder suggestRequestBuilder = client.prepareSuggest(indices); - suggestRequestBuilder.addSuggestion(suggestion); - return suggestRequestBuilder.execute().actionGet(); + public SearchResponse suggest(SuggestBuilder suggestion, String... indices) { + return client.prepareSearch(indices).suggest(suggestion).get(); } - public SuggestResponse suggest(SuggestBuilder.SuggestionBuilder suggestion, Class clazz) { + public SearchResponse suggest(SuggestBuilder suggestion, Class clazz) { return suggest(suggestion, retrieveIndexNameFromPersistentEntity(clazz)); } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/FacetedPageImpl.java b/src/main/java/org/springframework/data/elasticsearch/core/FacetedPageImpl.java index c0c20ba62..7cc2bb572 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/FacetedPageImpl.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/FacetedPageImpl.java @@ -54,7 +54,7 @@ public abstract class FacetedPageImpl extends PageImpl implements FacetedP } public FacetedPageImpl(List content, Pageable pageable, long total) { - super(content, pageable, total); + super(content, Pageable.unpaged(), total); } @Override diff --git a/src/main/java/org/springframework/data/elasticsearch/core/MappingBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/MappingBuilder.java index 0f37add0a..27c73afca 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/MappingBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/MappingBuilder.java @@ -51,6 +51,7 @@ import org.springframework.data.util.TypeInformation; */ class MappingBuilder { + public static final String FIELD_DATA = "fielddata"; public static final String FIELD_STORE = "store"; public static final String FIELD_TYPE = "type"; public static final String FIELD_INDEX = "index"; @@ -60,13 +61,12 @@ class MappingBuilder { public static final String FIELD_PROPERTIES = "properties"; public static final String FIELD_PARENT = "_parent"; - public static final String COMPLETION_PAYLOADS = "payloads"; public static final String COMPLETION_PRESERVE_SEPARATORS = "preserve_separators"; public static final String COMPLETION_PRESERVE_POSITION_INCREMENTS = "preserve_position_increments"; public static final String COMPLETION_MAX_INPUT_LENGTH = "max_input_length"; public static final String INDEX_VALUE_NOT_ANALYZED = "not_analyzed"; - public static final String TYPE_VALUE_STRING = "string"; + public static final String TYPE_VALUE_STRING = "text"; public static final String TYPE_VALUE_GEO_POINT = "geo_point"; public static final String TYPE_VALUE_COMPLETION = "completion"; public static final String TYPE_VALUE_GEO_HASH_PREFIX = "geohash_prefix"; @@ -192,18 +192,18 @@ class MappingBuilder { xContentBuilder.field(FIELD_TYPE, TYPE_VALUE_GEO_POINT); GeoPointField annotation = field.getAnnotation(GeoPointField.class); - if (annotation != null) { - if (annotation.geoHashPrefix()) { - xContentBuilder.field(TYPE_VALUE_GEO_HASH_PREFIX, true); - if (StringUtils.isNotEmpty(annotation.geoHashPrecision())) { - if (NumberUtils.isNumber(annotation.geoHashPrecision())) { - xContentBuilder.field(TYPE_VALUE_GEO_HASH_PRECISION, Integer.parseInt(annotation.geoHashPrecision())); - } else { - xContentBuilder.field(TYPE_VALUE_GEO_HASH_PRECISION, annotation.geoHashPrecision()); - } - } - } - } +// if (annotation != null) { +// if (annotation.geoHashPrefix()) { +// xContentBuilder.field(TYPE_VALUE_GEO_HASH_PREFIX, true); +// if (StringUtils.isNotEmpty(annotation.geoHashPrecision())) { +// if (NumberUtils.isNumber(annotation.geoHashPrecision())) { +// xContentBuilder.field(TYPE_VALUE_GEO_HASH_PRECISION, Integer.parseInt(annotation.geoHashPrecision())); +// } else { +// xContentBuilder.field(TYPE_VALUE_GEO_HASH_PRECISION, annotation.geoHashPrecision()); +// } +// } +// } +// } xContentBuilder.endObject(); } @@ -213,7 +213,6 @@ class MappingBuilder { xContentBuilder.field(FIELD_TYPE, TYPE_VALUE_COMPLETION); if (annotation != null) { xContentBuilder.field(COMPLETION_MAX_INPUT_LENGTH, annotation.maxInputLength()); - xContentBuilder.field(COMPLETION_PAYLOADS, annotation.payloads()); xContentBuilder.field(COMPLETION_PRESERVE_POSITION_INCREMENTS, annotation.preservePositionIncrements()); xContentBuilder.field(COMPLETION_PRESERVE_SEPARATORS, annotation.preserveSeparators()); if (isNotBlank(annotation.searchAnalyzer())) { @@ -245,6 +244,10 @@ class MappingBuilder { if(!nestedOrObjectField) { xContentBuilder.field(FIELD_STORE, fieldAnnotation.store()); } + if(fieldAnnotation.fielddata()) { + xContentBuilder.field(FIELD_DATA, fieldAnnotation.fielddata()); + } + if (FieldType.Auto != fieldAnnotation.type()) { xContentBuilder.field(FIELD_TYPE, fieldAnnotation.type().name().toLowerCase()); if (FieldType.Date == fieldAnnotation.type() && DateFormat.none != fieldAnnotation.format()) { @@ -252,8 +255,8 @@ class MappingBuilder { ? fieldAnnotation.pattern() : fieldAnnotation.format()); } } - if (FieldIndex.not_analyzed == fieldAnnotation.index() || FieldIndex.no == fieldAnnotation.index()) { - xContentBuilder.field(FIELD_INDEX, fieldAnnotation.index().name().toLowerCase()); + if(!fieldAnnotation.index()) { + xContentBuilder.field(FIELD_INDEX, fieldAnnotation.index()); } if (isNotBlank(fieldAnnotation.searchAnalyzer())) { xContentBuilder.field(FIELD_SEARCH_ANALYZER, fieldAnnotation.searchAnalyzer()); @@ -276,8 +279,8 @@ class MappingBuilder { if (FieldType.Auto != annotation.type()) { builder.field(FIELD_TYPE, annotation.type().name().toLowerCase()); } - if (FieldIndex.not_analyzed == annotation.index()) { - builder.field(FIELD_INDEX, annotation.index().name().toLowerCase()); + if(!annotation.index()) { + builder.field(FIELD_INDEX, annotation.index()); } if (isNotBlank(annotation.searchAnalyzer())) { builder.field(FIELD_SEARCH_ANALYZER, annotation.searchAnalyzer()); @@ -285,6 +288,9 @@ class MappingBuilder { if (isNotBlank(annotation.indexAnalyzer())) { builder.field(FIELD_INDEX_ANALYZER, annotation.indexAnalyzer()); } + if (annotation.fielddata()) { + builder.field(FIELD_DATA, annotation.fielddata()); + } builder.endObject(); } @@ -296,10 +302,10 @@ class MappingBuilder { private static void addMultiFieldMapping(XContentBuilder builder, java.lang.reflect.Field field, MultiField annotation, boolean nestedOrObjectField) throws IOException { builder.startObject(field.getName()); - builder.field(FIELD_TYPE, "multi_field"); + builder.field(FIELD_TYPE, annotation.mainField().type()); builder.startObject("fields"); //add standard field - addSingleFieldMapping(builder, field, annotation.mainField(),nestedOrObjectField); + //addSingleFieldMapping(builder, field, annotation.mainField(), nestedOrObjectField); for (InnerField innerField : annotation.otherFields()) { addNestedFieldMapping(builder, field, innerField); } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ScrolledPage.java b/src/main/java/org/springframework/data/elasticsearch/core/ScrolledPage.java new file mode 100644 index 000000000..65577a757 --- /dev/null +++ b/src/main/java/org/springframework/data/elasticsearch/core/ScrolledPage.java @@ -0,0 +1,13 @@ + +package org.springframework.data.elasticsearch.core; + +import org.springframework.data.domain.Page; + +/** + * @author Artur Konczak + */ +public interface ScrolledPage extends Page { + + String getScrollId(); + +} diff --git a/src/main/java/org/springframework/data/elasticsearch/core/aggregation/AggregatedPage.java b/src/main/java/org/springframework/data/elasticsearch/core/aggregation/AggregatedPage.java index 77a8c740e..0e446e145 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/aggregation/AggregatedPage.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/aggregation/AggregatedPage.java @@ -3,11 +3,12 @@ package org.springframework.data.elasticsearch.core.aggregation; import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.Aggregations; import org.springframework.data.elasticsearch.core.FacetedPage; +import org.springframework.data.elasticsearch.core.ScrolledPage; /** * @author Petar Tahchiev */ -public interface AggregatedPage extends FacetedPage { +public interface AggregatedPage extends FacetedPage, ScrolledPage { boolean hasAggregations(); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/aggregation/impl/AggregatedPageImpl.java b/src/main/java/org/springframework/data/elasticsearch/core/aggregation/impl/AggregatedPageImpl.java index f12bbb046..aeb301c55 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/aggregation/impl/AggregatedPageImpl.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/aggregation/impl/AggregatedPageImpl.java @@ -34,15 +34,26 @@ public class AggregatedPageImpl extends FacetedPageImpl implements Aggrega private Aggregations aggregations; private Map mapOfAggregations = new HashMap<>(); + private String scrollId; public AggregatedPageImpl(List content) { super(content); } + public AggregatedPageImpl(List content, String scrollId) { + super(content); + this.scrollId = scrollId; + } + public AggregatedPageImpl(List content, Pageable pageable, long total) { super(content, pageable, total); } + public AggregatedPageImpl(List content, Pageable pageable, long total, String scrollId) { + super(content, pageable, total); + this.scrollId = scrollId; + } + public AggregatedPageImpl(List content, Pageable pageable, long total, Aggregations aggregations) { super(content, pageable, total); this.aggregations = aggregations; @@ -53,6 +64,17 @@ public class AggregatedPageImpl extends FacetedPageImpl implements Aggrega } } + public AggregatedPageImpl(List content, Pageable pageable, long total, Aggregations aggregations, String scrollId) { + super(content, pageable, total); + this.aggregations = aggregations; + this.scrollId = scrollId; + if (aggregations != null) { + for (Aggregation aggregation : aggregations) { + mapOfAggregations.put(aggregation.getName(), aggregation); + } + } + } + @Override public boolean hasAggregations() { return aggregations != null && mapOfAggregations.size() > 0; @@ -67,4 +89,9 @@ public class AggregatedPageImpl extends FacetedPageImpl implements Aggrega public Aggregation getAggregation(String name) { return aggregations == null ? null : aggregations.get(name); } + + @Override + public String getScrollId() { + return scrollId; + } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/completion/Completion.java b/src/main/java/org/springframework/data/elasticsearch/core/completion/Completion.java index 0b8d08024..1378aaba7 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/completion/Completion.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/completion/Completion.java @@ -11,9 +11,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; public class Completion { private String[] input; - private String output; private Integer weight; - private Object payload; private Completion() { //required by mapper to instantiate object @@ -31,22 +29,6 @@ public class Completion { this.input = input; } - public String getOutput() { - return output; - } - - public void setOutput(String output) { - this.output = output; - } - - public Object getPayload() { - return payload; - } - - public void setPayload(Object payload) { - this.payload = payload; - } - public Integer getWeight() { return weight; } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/facet/request/HistogramFacetRequest.java b/src/main/java/org/springframework/data/elasticsearch/core/facet/request/HistogramFacetRequest.java index 1923041b7..6ba538155 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/facet/request/HistogramFacetRequest.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/facet/request/HistogramFacetRequest.java @@ -19,7 +19,7 @@ package org.springframework.data.elasticsearch.core.facet.request; import org.apache.commons.lang.StringUtils; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramBuilder; +import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval; import org.springframework.data.elasticsearch.core.facet.AbstractFacetRequest; import org.springframework.util.Assert; @@ -57,16 +57,16 @@ public class HistogramFacetRequest extends AbstractFacetRequest { Assert.isTrue(StringUtils.isNotBlank(field), "Please select field on which to build the facet !!!"); Assert.isTrue(interval > 0, "Please provide interval as positive value greater them zero !!!"); - DateHistogramBuilder dateHistogramBuilder = AggregationBuilders.dateHistogram(getName()); + DateHistogramAggregationBuilder dateHistogramBuilder = AggregationBuilders.dateHistogram(getName()); dateHistogramBuilder.field(field); if (timeUnit != null) { - dateHistogramBuilder.interval(timeUnit); + dateHistogramBuilder.dateHistogramInterval(timeUnit); } else { dateHistogramBuilder.interval(interval); } - dateHistogramBuilder.subAggregation(AggregationBuilders.extendedStats(INTERNAL_STATS)); + dateHistogramBuilder.subAggregation(AggregationBuilders.extendedStats(INTERNAL_STATS).field(field)); return dateHistogramBuilder; } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/facet/request/RangeFacetRequest.java b/src/main/java/org/springframework/data/elasticsearch/core/facet/request/RangeFacetRequest.java index 9a1d7b9e2..5f7139a27 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/facet/request/RangeFacetRequest.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/facet/request/RangeFacetRequest.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.commons.lang.StringUtils; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.bucket.range.RangeBuilder; +import org.elasticsearch.search.aggregations.bucket.range.RangeAggregationBuilder; import org.springframework.data.elasticsearch.core.facet.AbstractFacetRequest; import org.springframework.util.Assert; @@ -76,15 +76,16 @@ public class RangeFacetRequest extends AbstractFacetRequest { public AbstractAggregationBuilder getFacet() { Assert.notNull(getName(), "Facet name can't be a null !!!"); - RangeBuilder rangeBuilder = AggregationBuilders.range(getName()); - rangeBuilder.field(StringUtils.isNotBlank(keyField) ? keyField : field ); + RangeAggregationBuilder rangeBuilder = AggregationBuilders.range(getName()); + final String field = StringUtils.isNotBlank(keyField) ? keyField : this.field; + rangeBuilder.field(field); for (Entry entry : entries) { DoubleEntry doubleEntry = (DoubleEntry) entry; rangeBuilder.addRange(validateValue(doubleEntry.getFrom(), Double.NEGATIVE_INFINITY), validateValue(doubleEntry.getTo(), Double.POSITIVE_INFINITY)); } - rangeBuilder.subAggregation(AggregationBuilders.extendedStats(INTERNAL_STATS)); + rangeBuilder.subAggregation(AggregationBuilders.extendedStats(INTERNAL_STATS).field(field)); if(StringUtils.isNotBlank(valueField)){ rangeBuilder.subAggregation(AggregationBuilders.sum(RANGE_INTERNAL_SUM).field(valueField)); } 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 72859ecc6..1cf99384d 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 @@ -18,10 +18,12 @@ package org.springframework.data.elasticsearch.core.facet.request; import org.apache.commons.lang.ArrayUtils; 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.bucket.terms.TermsBuilder; +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; @@ -75,7 +77,7 @@ public class TermFacetRequest extends AbstractFacetRequest { @Override public AbstractAggregationBuilder getFacet() { Assert.notEmpty(fields, "Please select at last one field !!!"); - TermsBuilder termsBuilder = AggregationBuilders.terms(getName()).field(fields[0]).size(this.size); + final TermsAggregationBuilder termsBuilder = AggregationBuilders.terms(getName()).field(fields[0]).size(this.size); switch (order) { case descTerm: @@ -91,7 +93,7 @@ public class TermFacetRequest extends AbstractFacetRequest { termsBuilder.order(Terms.Order.count(true)); } if (ArrayUtils.isNotEmpty(excludeTerms)) { - termsBuilder.exclude(excludeTerms); + termsBuilder.includeExclude(new IncludeExclude(null,excludeTerms)); } if (allTerms) { @@ -99,7 +101,7 @@ public class TermFacetRequest extends AbstractFacetRequest { } if (StringUtils.isNotBlank(regex)) { - termsBuilder.include(regex); + termsBuilder.includeExclude(new IncludeExclude(new RegExp(regex),null)); } return termsBuilder; diff --git a/src/main/java/org/springframework/data/elasticsearch/core/geo/CustomGeoModule.java b/src/main/java/org/springframework/data/elasticsearch/core/geo/CustomGeoModule.java index fcc93d5f3..e13c97fe9 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/geo/CustomGeoModule.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/geo/CustomGeoModule.java @@ -1,10 +1,8 @@ package org.springframework.data.elasticsearch.core.geo; import java.io.IOException; - import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -32,39 +30,15 @@ public class CustomGeoModule extends SimpleModule { } class PointSerializer extends JsonSerializer { - @Override - public void serialize(Point value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { + public void serialize(Point value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeObject(GeoPoint.fromPoint(value)); -// gen.writeStartObject(); -// gen.writeNumberField("lat", value.getY()); -// gen.writeNumberField("lon", value.getX()); -// gen.writeEndObject(); } } class PointDeserializer extends JsonDeserializer { - @Override - public Point deserialize(JsonParser p, DeserializationContext context) throws IOException, JsonProcessingException { - - GeoPoint point = p.readValueAs(GeoPoint.class); -// Double lat = null; -// Double lon = null; -// //skipp field name -// p.nextFieldName(); -// if ("lat".equals(p.getCurrentName())) { -// //get value -// p.nextFieldName(); -// lat = p.getDoubleValue(); -// p.nextFieldName(); -// } -// if ("lon".equals(p.getCurrentName())) { -// //get value -// p.nextFieldName(); -// lon = p.getDoubleValue(); -// } -// return new Point(lon, lat); - return GeoPoint.toPoint(point); + public Point deserialize(JsonParser p, DeserializationContext context) throws IOException { + return GeoPoint.toPoint(p.readValueAs(GeoPoint.class)); } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQuery.java b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQuery.java index 239eacce6..c2ef8284a 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQuery.java @@ -20,7 +20,7 @@ import java.util.List; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; -import org.elasticsearch.search.highlight.HighlightBuilder; +import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.sort.SortBuilder; import org.springframework.data.elasticsearch.core.facet.FacetRequest; diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java index c168ac625..1b1072440 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java @@ -22,7 +22,7 @@ import java.util.List; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; -import org.elasticsearch.search.highlight.HighlightBuilder; +import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.sort.SortBuilder; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.core.facet.FacetRequest; diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java b/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java index d6e6cf86f..4895fb892 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java @@ -17,7 +17,6 @@ package org.springframework.data.elasticsearch.core.query; import java.util.Collection; import java.util.List; - import org.elasticsearch.action.search.SearchType; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -43,13 +42,6 @@ public interface Query { */ T setPageable(Pageable pageable); - /** - * Get filter queries if defined - * - * @return - */ - // List getFilterQueries(); - /** * Get page settings if defined * diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/SearchQuery.java b/src/main/java/org/springframework/data/elasticsearch/core/query/SearchQuery.java index f3bfa9fa5..f2e3f29e4 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/SearchQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/SearchQuery.java @@ -19,7 +19,7 @@ import java.util.List; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; -import org.elasticsearch.search.highlight.HighlightBuilder; +import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.sort.SortBuilder; import org.springframework.data.elasticsearch.core.facet.FacetRequest; diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/config/EnableElasticsearchRepositories.java b/src/main/java/org/springframework/data/elasticsearch/repository/config/EnableElasticsearchRepositories.java index ca1c0438b..9974401bc 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/config/EnableElasticsearchRepositories.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/config/EnableElasticsearchRepositories.java @@ -48,7 +48,7 @@ public @interface EnableElasticsearchRepositories { /** * Base packages to scan for annotated components. {@link #value()} is an alias for (and mutually exclusive with) this - * attribute. Use {@link #basePackageClasses()} for a type-safe alternative to String-based package names. + * attribute. Use {@link #basePackageClasses()} for a type-safe alternative to text-based package names. */ String[] basePackages() default {}; diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java index c4dd52429..dab180b1e 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java @@ -61,7 +61,8 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery } else if (queryMethod.isStreamQuery()) { Class entityType = queryMethod.getEntityInformation().getJavaType(); if (query.getPageable().isUnpaged()) { - query.setPageable(PageRequest.of(0, 20)); + int itemCount = (int) elasticsearchOperations.count(query, queryMethod.getEntityInformation().getJavaType()); + query.setPageable(PageRequest.of(0, Math.max(1, itemCount))); } return StreamUtils.createStreamFromIterator((CloseableIterator) elasticsearchOperations.stream(query, entityType)); diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 000000000..5dc63878c --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/org/springframework/data/elasticsearch/InnerObjectTests.java b/src/test/java/org/springframework/data/elasticsearch/InnerObjectTests.java index e42cf3aef..6e62ad0b5 100644 --- a/src/test/java/org/springframework/data/elasticsearch/InnerObjectTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/InnerObjectTests.java @@ -20,7 +20,9 @@ import static org.apache.commons.lang.RandomStringUtils.*; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; +import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,7 +39,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration("classpath:/repository-test-nested-object.xml") +@ContextConfiguration("classpath:/repository-test-nested-object-books.xml") public class InnerObjectTests { @Autowired private SampleElasticSearchBookRepository bookRepository; diff --git a/src/test/java/org/springframework/data/elasticsearch/NestedObjectTests.java b/src/test/java/org/springframework/data/elasticsearch/NestedObjectTests.java index 7d41be174..c37c4b75c 100644 --- a/src/test/java/org/springframework/data/elasticsearch/NestedObjectTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/NestedObjectTests.java @@ -28,6 +28,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.junit.Before; @@ -129,7 +130,7 @@ public class NestedObjectTests { elasticsearchTemplate.bulkIndex(indexQueries); elasticsearchTemplate.refresh(Person.class); - final QueryBuilder builder = nestedQuery("car", boolQuery().must(termQuery("car.name", "saturn")).must(termQuery("car.model", "imprezza"))); + final QueryBuilder builder = nestedQuery("car", boolQuery().must(termQuery("car.name", "saturn")).must(termQuery("car.model", "imprezza")), ScoreMode.None); final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build(); final List persons = elasticsearchTemplate.queryForList(searchQuery, Person.class); @@ -186,8 +187,8 @@ public class NestedObjectTests { //then final BoolQueryBuilder builder = boolQuery(); - builder.must(nestedQuery("girlFriends", termQuery("girlFriends.type", "temp"))) - .must(nestedQuery("girlFriends.cars", termQuery("girlFriends.cars.name", "Ford".toLowerCase()))); + builder.must(nestedQuery("girlFriends", termQuery("girlFriends.type", "temp"),ScoreMode.None)) + .must(nestedQuery("girlFriends.cars", termQuery("girlFriends.cars.name", "Ford".toLowerCase()),ScoreMode.None)); final SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(builder) @@ -325,7 +326,7 @@ public class NestedObjectTests { elasticsearchTemplate.bulkIndex(indexQueries); elasticsearchTemplate.refresh(Person.class); - final QueryBuilder builder = nestedQuery("books", boolQuery().must(termQuery("books.name", "java"))); + final QueryBuilder builder = nestedQuery("books", boolQuery().must(termQuery("books.name", "java")), ScoreMode.None); final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build(); final List persons = elasticsearchTemplate.queryForList(searchQuery, Person.class); @@ -373,7 +374,7 @@ public class NestedObjectTests { elasticsearchTemplate.refresh(Book.class); //then final SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(nestedQuery("buckets", termQuery("buckets.1", "test3"))) + .withQuery(nestedQuery("buckets", termQuery("buckets.1", "test3"),ScoreMode.None)) .build(); final Page books = elasticsearchTemplate.queryForPage(searchQuery, Book.class); diff --git a/src/test/java/org/springframework/data/elasticsearch/SampleEntity.java b/src/test/java/org/springframework/data/elasticsearch/SampleEntity.java deleted file mode 100644 index a313b340b..000000000 --- a/src/test/java/org/springframework/data/elasticsearch/SampleEntity.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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; - -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; -import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.Version; -import org.springframework.data.elasticsearch.annotations.Document; -import org.springframework.data.elasticsearch.annotations.ScriptedField; - -/** - * @author Rizwan Idrees - * @author Mohsin Husen - */ -@Document(indexName = "test-index", type = "test-type", shards = 1, replicas = 0, refreshInterval = "-1") -public class SampleEntity { - - @Id - private String id; - private String type; - private String message; - private int rate; - @ScriptedField - private Long scriptedRate; - private boolean available; - private String highlightedMessage; - @Version - private Long version; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public int getRate() { - return rate; - } - - public void setRate(int rate) { - this.rate = rate; - } - - public Long getScriptedRate() { - return scriptedRate; - } - - public void setScriptedRate(Long scriptedRate) { - this.scriptedRate = scriptedRate; - } - - public boolean isAvailable() { - return available; - } - - public void setAvailable(boolean available) { - this.available = available; - } - - public String getHighlightedMessage() { - return highlightedMessage; - } - - public void setHighlightedMessage(String highlightedMessage) { - this.highlightedMessage = highlightedMessage; - } - - public Long getVersion() { - return version; - } - - public void setVersion(Long version) { - this.version = version; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof SampleEntity)) { - return false; - } - if (this == obj) { - return true; - } - SampleEntity rhs = (SampleEntity) obj; - return new EqualsBuilder().append(this.id, rhs.id).append(this.type, rhs.type).append(this.message, rhs.message) - .append(this.rate, rhs.rate).append(this.available, rhs.available).append(this.version, rhs.version).isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder().append(id).append(type).append(message).append(rate).append(available).append(version) - .toHashCode(); - } - - @Override - public String toString() { - return "SampleEntity{" + - "id='" + id + '\'' + - ", type='" + type + '\'' + - ", message='" + message + '\'' + - ", rate=" + rate + - ", available=" + available + - ", highlightedMessage='" + highlightedMessage + '\'' + - ", version=" + version + - '}'; - } -} diff --git a/src/test/java/org/springframework/data/elasticsearch/SampleEntityUUIDKeyed.java b/src/test/java/org/springframework/data/elasticsearch/SampleEntityUUIDKeyed.java deleted file mode 100644 index 82fc5d601..000000000 --- a/src/test/java/org/springframework/data/elasticsearch/SampleEntityUUIDKeyed.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * 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; - -import java.util.UUID; - -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; -import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.Version; -import org.springframework.data.elasticsearch.annotations.Document; -import org.springframework.data.elasticsearch.annotations.ScriptedField; - -/** - * @author Gad Akuka - */ -@Document(indexName = "test-index", type = "test-type", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1") -public class SampleEntityUUIDKeyed { - - @Id - private UUID id; - private String type; - private String message; - private int rate; - @ScriptedField - private Long scriptedRate; - private boolean available; - private String highlightedMessage; - @Version - private Long version; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public int getRate() { - return rate; - } - - public void setRate(int rate) { - this.rate = rate; - } - - public Long getScriptedRate() { - return scriptedRate; - } - - public void setScriptedRate(Long scriptedRate) { - this.scriptedRate = scriptedRate; - } - - public boolean isAvailable() { - return available; - } - - public void setAvailable(boolean available) { - this.available = available; - } - - public String getHighlightedMessage() { - return highlightedMessage; - } - - public void setHighlightedMessage(String highlightedMessage) { - this.highlightedMessage = highlightedMessage; - } - - public Long getVersion() { - return version; - } - - public void setVersion(Long version) { - this.version = version; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof SampleEntityUUIDKeyed)) { - return false; - } - if (this == obj) { - return true; - } - SampleEntityUUIDKeyed rhs = (SampleEntityUUIDKeyed) obj; - return new EqualsBuilder().append(this.id, rhs.id).append(this.type, rhs.type).append(this.message, rhs.message) - .append(this.rate, rhs.rate).append(this.available, rhs.available).append(this.version, rhs.version).isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder().append(id).append(type).append(message).append(rate).append(available).append(version) - .toHashCode(); - } - - @Override - public String toString() { - return "SampleEntity{" + - "id='" + id + '\'' + - ", type='" + type + '\'' + - ", message='" + message + '\'' + - ", rate=" + rate + - ", available=" + available + - ", highlightedMessage='" + highlightedMessage + '\'' + - ", version=" + version + - '}'; - } -} diff --git a/src/test/java/org/springframework/data/elasticsearch/Utils.java b/src/test/java/org/springframework/data/elasticsearch/Utils.java index 1dfe172a3..5aa016fa7 100644 --- a/src/test/java/org/springframework/data/elasticsearch/Utils.java +++ b/src/test/java/org/springframework/data/elasticsearch/Utils.java @@ -15,24 +15,36 @@ */ package org.springframework.data.elasticsearch; -import static org.elasticsearch.node.NodeBuilder.*; - import java.util.UUID; - -import org.elasticsearch.client.node.NodeClient; +import org.elasticsearch.client.Client; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.node.NodeValidationException; +import org.elasticsearch.transport.Netty4Plugin; +import org.springframework.data.elasticsearch.client.NodeClientFactoryBean; +import static java.util.Arrays.*; /** * @author Mohsin Husen + * @author Artur Konczak */ public class Utils { - public static NodeClient getNodeClient() { - return (NodeClient) nodeBuilder().settings(Settings.builder() - .put("http.enabled", "false") - .put("path.data", "target/elasticsearchTestData") - .put("path.home", "src/test/resources/test-home-dir")) - .clusterName(UUID.randomUUID().toString()).local(true).node() - .client(); + public static Client getNodeClient() throws NodeValidationException { + + String pathHome = "src/test/resources/test-home-dir"; + String pathData = "target/elasticsearchTestData"; + String clusterName = UUID.randomUUID().toString(); + + 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/config/ElasticsearchNamespaceHandlerTests.java b/src/test/java/org/springframework/data/elasticsearch/config/ElasticsearchNamespaceHandlerTests.java index 15db89a9f..fcfb895c6 100644 --- a/src/test/java/org/springframework/data/elasticsearch/config/ElasticsearchNamespaceHandlerTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/config/ElasticsearchNamespaceHandlerTests.java @@ -23,7 +23,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; -import org.springframework.data.elasticsearch.client.NodeClientFactoryBean; import org.springframework.data.elasticsearch.client.TransportClientFactoryBean; import org.springframework.data.elasticsearch.repositories.sample.SampleElasticsearchRepository; import org.springframework.test.context.ContextConfiguration; @@ -41,12 +40,6 @@ public class ElasticsearchNamespaceHandlerTests { @Autowired private ApplicationContext context; - @Test - public void shouldCreatesNodeClient() { - assertThat(context.getBean(NodeClientFactoryBean.class), is(notNullValue())); - assertThat(context.getBean(NodeClientFactoryBean.class), is(instanceOf(NodeClientFactoryBean.class))); - } - @Test public void shouldCreateTransportClient() { assertThat(context.getBean(TransportClientFactoryBean.class), is(notNullValue())); diff --git a/src/test/java/org/springframework/data/elasticsearch/config/EnableElasticsearchRepositoriesTests.java b/src/test/java/org/springframework/data/elasticsearch/config/EnableElasticsearchRepositoriesTests.java index 57308dd69..eee078811 100644 --- a/src/test/java/org/springframework/data/elasticsearch/config/EnableElasticsearchRepositoriesTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/config/EnableElasticsearchRepositoriesTests.java @@ -20,6 +20,7 @@ import static org.junit.Assert.*; import java.util.Arrays; +import org.elasticsearch.node.NodeValidationException; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.BeansException; @@ -62,7 +63,7 @@ public class EnableElasticsearchRepositoriesTests implements ApplicationContextA static class Config { @Bean - public ElasticsearchOperations elasticsearchTemplate() { + public ElasticsearchOperations elasticsearchTemplate() throws NodeValidationException { return new ElasticsearchTemplate(Utils.getNodeClient()); } } diff --git a/src/test/java/org/springframework/data/elasticsearch/config/EnableNestedElasticsearchRepositoriesTests.java b/src/test/java/org/springframework/data/elasticsearch/config/EnableNestedElasticsearchRepositoriesTests.java index d0cf0eae5..d611e8891 100644 --- a/src/test/java/org/springframework/data/elasticsearch/config/EnableNestedElasticsearchRepositoriesTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/config/EnableNestedElasticsearchRepositoriesTests.java @@ -17,6 +17,7 @@ package org.springframework.data.elasticsearch.config; import static org.junit.Assert.*; +import org.elasticsearch.node.NodeValidationException; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -44,7 +45,7 @@ public class EnableNestedElasticsearchRepositoriesTests { static class Config { @Bean - public ElasticsearchOperations elasticsearchTemplate() { + public ElasticsearchOperations elasticsearchTemplate() throws NodeValidationException { return new ElasticsearchTemplate(Utils.getNodeClient()); } } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/CustomEntityMapper.java b/src/test/java/org/springframework/data/elasticsearch/core/CustomEntityMapper.java index 5ff250504..45c108cf1 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/CustomEntityMapper.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/CustomEntityMapper.java @@ -29,13 +29,13 @@ public class CustomEntityMapper implements EntityMapper { @Override public String mapToString(Object object) throws IOException { - //mapping Object to String + //mapping Object to text return null; } @Override public T mapToObject(String source, Class clazz) throws IOException { - //mapping String to Object + //mapping text to Object return null; } } 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 0ab2cc441..907837b37 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java @@ -195,7 +195,7 @@ public class DefaultResultMapperTests { return result; } - @Document(indexName = "someIndex") + @Document(indexName = "test-index-immutable-internal") @NoArgsConstructor(force = true) @Getter static class ImmutableEntity { 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 e835f65b8..bdabe5a0e 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateParentChildTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateParentChildTests.java @@ -22,6 +22,7 @@ import static org.junit.Assert.*; import java.util.List; +import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.action.RoutingMissingException; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; @@ -80,7 +81,7 @@ public class ElasticsearchTemplateParentChildTests { elasticsearchTemplate.refresh(ChildEntity.class); // find all parents that have the first child - QueryBuilder query = hasChildQuery(ParentEntity.CHILD_TYPE, QueryBuilders.termQuery("name", child1name.toLowerCase())); + QueryBuilder query = hasChildQuery(ParentEntity.CHILD_TYPE, QueryBuilders.termQuery("name", child1name.toLowerCase()), ScoreMode.None); List parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class); // we're expecting only the first parent as result 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 faf9f0490..c01710d35 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -15,20 +15,14 @@ */ package org.springframework.data.elasticsearch.core; -import static org.apache.commons.lang.RandomStringUtils.*; -import static org.elasticsearch.index.query.QueryBuilders.*; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; -import static org.springframework.data.elasticsearch.utils.IndexBuilder.*; - import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.UUID; - import org.apache.commons.lang.StringUtils; import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetResponse; @@ -36,14 +30,13 @@ import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.engine.DocumentMissingException; import org.elasticsearch.script.Script; -import org.elasticsearch.script.ScriptService; +import org.elasticsearch.script.ScriptType; import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.highlight.HighlightBuilder; +import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.SortOrder; import org.hamcrest.Matchers; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -55,20 +48,7 @@ import org.springframework.data.elasticsearch.ElasticsearchException; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage; import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl; -import org.springframework.data.elasticsearch.core.query.Criteria; -import org.springframework.data.elasticsearch.core.query.CriteriaQuery; -import org.springframework.data.elasticsearch.core.query.DeleteQuery; -import org.springframework.data.elasticsearch.core.query.FetchSourceFilterBuilder; -import org.springframework.data.elasticsearch.core.query.GetQuery; -import org.springframework.data.elasticsearch.core.query.IndexQuery; -import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder; -import org.springframework.data.elasticsearch.core.query.MoreLikeThisQuery; -import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; -import org.springframework.data.elasticsearch.core.query.ScriptField; -import org.springframework.data.elasticsearch.core.query.SearchQuery; -import org.springframework.data.elasticsearch.core.query.StringQuery; -import org.springframework.data.elasticsearch.core.query.UpdateQuery; -import org.springframework.data.elasticsearch.core.query.UpdateQueryBuilder; +import org.springframework.data.elasticsearch.core.query.*; import org.springframework.data.elasticsearch.entities.HetroEntity1; import org.springframework.data.elasticsearch.entities.HetroEntity2; import org.springframework.data.elasticsearch.entities.SampleEntity; @@ -77,6 +57,11 @@ import org.springframework.data.elasticsearch.entities.UseServerConfigurationEnt import org.springframework.data.util.CloseableIterator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import static org.apache.commons.lang.RandomStringUtils.*; +import static org.elasticsearch.index.query.QueryBuilders.*; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; +import static org.springframework.data.elasticsearch.utils.IndexBuilder.*; /** * @author Rizwan Idrees @@ -90,7 +75,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @ContextConfiguration("classpath:elasticsearch-template-test.xml") public class ElasticsearchTemplateTests { - private static final String INDEX_NAME = "test-index"; + private static final String INDEX_NAME = "test-index-sample"; private static final String INDEX_1_NAME = "test-index-1"; private static final String INDEX_2_NAME = "test-index-2"; private static final String TYPE_NAME = "test-type"; @@ -102,6 +87,7 @@ public class ElasticsearchTemplateTests { public void before() { elasticsearchTemplate.deleteIndex(SampleEntity.class); elasticsearchTemplate.createIndex(SampleEntity.class); + elasticsearchTemplate.putMapping(SampleEntity.class); elasticsearchTemplate.deleteIndex(INDEX_1_NAME); elasticsearchTemplate.deleteIndex(INDEX_2_NAME); elasticsearchTemplate.deleteIndex(UseServerConfigurationEntity.class); @@ -225,8 +211,8 @@ public class ElasticsearchTemplateTests { for (MultiGetItemResponse response : responses.getResponses()) { SampleEntity entity = new SampleEntity(); entity.setId(response.getResponse().getId()); - entity.setMessage((String) response.getResponse().getField("message").getValue()); - entity.setType((String) response.getResponse().getField("type").getValue()); + entity.setMessage((String) response.getResponse().getSource().get("message")); + entity.setType((String) response.getResponse().getSource().get("type")); list.add((T) entity); } return list; @@ -426,7 +412,7 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.refresh(SampleEntity.class); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) - .withSort(new FieldSortBuilder("rate").ignoreUnmapped(true).order(SortOrder.ASC)).build(); + .withSort(new FieldSortBuilder("rate").order(SortOrder.ASC)).build(); // when Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class); // then @@ -465,8 +451,8 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.refresh(SampleEntity.class); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) - .withSort(new FieldSortBuilder("rate").ignoreUnmapped(true).order(SortOrder.ASC)) - .withSort(new FieldSortBuilder("message").ignoreUnmapped(true).order(SortOrder.ASC)).build(); + .withSort(new FieldSortBuilder("rate").order(SortOrder.ASC)) + .withSort(new FieldSortBuilder("message").order(SortOrder.ASC)).build(); // when Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class); // then @@ -517,12 +503,12 @@ public class ElasticsearchTemplateTests { SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(matchAllQuery()) .withScriptField(new ScriptField("scriptedRate", - new Script("doc['rate'].value * factor", ScriptService.ScriptType.INLINE, null, params))) + new Script(ScriptType.INLINE, "expression", "doc['rate'] * factor", params))) .build(); Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class); // then assertThat(sampleEntities.getTotalElements(), equalTo(1L)); - assertThat(sampleEntities.getContent().get(0).getScriptedRate(), equalTo(4L)); + assertThat(sampleEntities.getContent().get(0).getScriptedRate(), equalTo(4.0)); } @Test @@ -546,7 +532,6 @@ public class ElasticsearchTemplateTests { } @Test - @Ignore("By default, the search request will fail if there is no mapping associated with a field. The ignore_unmapped option allows to ignore fields that have no mapping and not sort by them") public void shouldReturnSortedPageableResultsGivenStringQuery() { // given String documentId = randomNumeric(5); @@ -563,7 +548,7 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.refresh(SampleEntity.class); StringQuery stringQuery = new StringQuery(matchAllQuery().toString(), new PageRequest(0, 10), new Sort( - new Sort.Order(Sort.Direction.ASC, "messsage"))); + new Sort.Order(Sort.Direction.ASC, "message"))); // when Page sampleEntities = elasticsearchTemplate.queryForPage(stringQuery, SampleEntity.class); // then @@ -594,6 +579,7 @@ public class ElasticsearchTemplateTests { public void shouldCreateIndexGivenEntityClass() { // when boolean created = elasticsearchTemplate.createIndex(SampleEntity.class); + elasticsearchTemplate.putMapping(SampleEntity.class); final Map setting = elasticsearchTemplate.getSetting(SampleEntity.class); // then assertThat(created, is(true)); @@ -663,7 +649,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.field("message").value()); + values.add((String) searchHit.getSource().get("message")); } return new AggregatedPageImpl<>((List) values); } @@ -753,18 +739,13 @@ public class ElasticsearchTemplateTests { criteriaQuery.addTypes(TYPE_NAME); criteriaQuery.setPageable(new PageRequest(0, 10)); - String scrollId = elasticsearchTemplate.scan(criteriaQuery, 1000, false); + ScrolledPage scroll = (ScrolledPage) elasticsearchTemplate.startScroll( 1000, criteriaQuery, SampleEntity.class); List sampleEntities = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = elasticsearchTemplate.scroll(scrollId, 5000L, SampleEntity.class); - if (page.hasContent()) { - sampleEntities.addAll(page.getContent()); - } else { - hasRecords = false; - } + while (scroll.hasContent()) { + sampleEntities.addAll(scroll.getContent()); + scroll = (ScrolledPage) elasticsearchTemplate.continueScroll(scroll.getScrollId() , 1000, SampleEntity.class); } - elasticsearchTemplate.clearScroll(scrollId); + elasticsearchTemplate.clearScroll(scroll.getScrollId()); assertThat(sampleEntities.size(), is(equalTo(30))); } @@ -780,26 +761,44 @@ public class ElasticsearchTemplateTests { SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withIndices(INDEX_NAME) .withTypes(TYPE_NAME).withPageable(new PageRequest(0, 10)).build(); - String scrollId = elasticsearchTemplate.scan(searchQuery, 1000, false); + ScrolledPage scroll = (ScrolledPage) elasticsearchTemplate.startScroll(1000, searchQuery, SampleEntity.class); List sampleEntities = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = elasticsearchTemplate.scroll(scrollId, 5000L, SampleEntity.class); - if (page.hasContent()) { - sampleEntities.addAll(page.getContent()); - } else { - hasRecords = false; - } + while (scroll.hasContent()) { + sampleEntities.addAll(scroll.getContent()); + scroll = (ScrolledPage) elasticsearchTemplate.continueScroll(scroll.getScrollId() , 1000, SampleEntity.class); } - elasticsearchTemplate.clearScroll(scrollId); + elasticsearchTemplate.clearScroll(scroll.getScrollId()); assertThat(sampleEntities.size(), is(equalTo(30))); } + + final SearchResultMapper searchResultMapper = new SearchResultMapper() { + @Override + public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { + List result = new ArrayList(); + for (SearchHit searchHit : response.getHits()) { + if (response.getHits().getHits().length <= 0) { + return new AggregatedPageImpl(Collections.EMPTY_LIST, response.getScrollId()); + } + String message = (String) searchHit.getSource().get("message"); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(searchHit.getId()); + sampleEntity.setMessage(message); + result.add(sampleEntity); + } + + if (result.size() > 0) { + return new AggregatedPageImpl((List) result, response.getScrollId()); + } + return new AggregatedPageImpl(Collections.EMPTY_LIST, response.getScrollId()); + } + }; + /* DATAES-167 */ @Test - public void shouldReturnResultsWithScanAndScrollForSpecifiedFieldsForCriteriaCriteria() { + public void shouldReturnResultsWithScanAndScrollForSpecifiedFieldsForCriteriaQuery() { //given List entities = createSampleEntitiesWithMessage("Test message", 30); // when @@ -813,35 +812,15 @@ public class ElasticsearchTemplateTests { criteriaQuery.addFields("message"); criteriaQuery.setPageable(new PageRequest(0, 10)); - String scrollId = elasticsearchTemplate.scan(criteriaQuery, 5000, false); + Page scroll = elasticsearchTemplate.startScroll(1000, criteriaQuery, SampleEntity.class, searchResultMapper); + String scrollId = ((ScrolledPage)scroll).getScrollId(); List sampleEntities = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = elasticsearchTemplate.scroll(scrollId, 5000L, new SearchResultMapper() { - @Override - public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { - List result = new ArrayList<>(); - for (SearchHit searchHit : response.getHits()) { - String message = searchHit.getFields().get("message").getValue(); - SampleEntity sampleEntity = new SampleEntity(); - sampleEntity.setId(searchHit.getId()); - sampleEntity.setMessage(message); - result.add(sampleEntity); - } - - if (result.size() > 0) { - return new AggregatedPageImpl<>((List) result); - } - return null; - } - }); - if (page != null) { - sampleEntities.addAll(page.getContent()); - } else { - hasRecords = false; + while (scroll.hasContent()) { + sampleEntities.addAll(scroll.getContent()); + scrollId = ((ScrolledPage)scroll).getScrollId(); + scroll = elasticsearchTemplate.continueScroll(scrollId , 1000, SampleEntity.class, searchResultMapper); } - } - elasticsearchTemplate.clearScroll(scrollId); + elasticsearchTemplate. clearScroll(scrollId); assertThat(sampleEntities.size(), is(equalTo(30))); } @@ -865,33 +844,13 @@ public class ElasticsearchTemplateTests { .withPageable(new PageRequest(0, 10)) .build(); - String scrollId = elasticsearchTemplate.scan(searchQuery, 10000, false); + Page scroll = elasticsearchTemplate.startScroll(1000, searchQuery, SampleEntity.class, searchResultMapper); + String scrollId = ((ScrolledPage) scroll).getScrollId(); List sampleEntities = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = elasticsearchTemplate.scroll(scrollId, 10000L, new SearchResultMapper() { - @Override - public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { - List result = new ArrayList<>(); - for (SearchHit searchHit : response.getHits()) { - String message = searchHit.getFields().get("message").getValue(); - SampleEntity sampleEntity = new SampleEntity(); - sampleEntity.setId(searchHit.getId()); - sampleEntity.setMessage(message); - result.add(sampleEntity); - } - - if (result.size() > 0) { - return new AggregatedPageImpl<>((List) result); - } - return null; - } - }); - if (page != null) { - sampleEntities.addAll(page.getContent()); - } else { - hasRecords = false; - } + while (scroll.hasContent()) { + sampleEntities.addAll(scroll.getContent()); + scrollId = ((ScrolledPage) scroll).getScrollId(); + scroll = elasticsearchTemplate.continueScroll(scrollId, 1000, SampleEntity.class, searchResultMapper); } elasticsearchTemplate.clearScroll(scrollId); assertThat(sampleEntities.size(), is(equalTo(30))); @@ -914,34 +873,13 @@ public class ElasticsearchTemplateTests { criteriaQuery.addTypes(TYPE_NAME); criteriaQuery.setPageable(new PageRequest(0, 10)); - String scrollId = elasticsearchTemplate.scan(criteriaQuery, 5000, false); + Page scroll = elasticsearchTemplate.startScroll(1000, criteriaQuery, SampleEntity.class, searchResultMapper); + String scrollId = ((ScrolledPage) scroll).getScrollId(); List sampleEntities = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = elasticsearchTemplate.scroll(scrollId, 5000L, new SearchResultMapper() { - @Override - public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { - List chunk = new ArrayList<>(); - for (SearchHit searchHit : response.getHits()) { - if (response.getHits().getHits().length <= 0) { - return null; - } - SampleEntity user = new SampleEntity(); - user.setId(searchHit.getId()); - user.setMessage((String) searchHit.getSource().get("message")); - chunk.add(user); - } - if (chunk.size() > 0) { - return new AggregatedPageImpl<>((List) chunk); - } - return null; - } - }); - if (page != null) { - sampleEntities.addAll(page.getContent()); - } else { - hasRecords = false; - } + while (scroll.hasContent()) { + sampleEntities.addAll(scroll.getContent()); + scrollId = ((ScrolledPage) scroll).getScrollId(); + scroll = elasticsearchTemplate.continueScroll(scrollId, 1000, SampleEntity.class, searchResultMapper); } elasticsearchTemplate.clearScroll(scrollId); assertThat(sampleEntities.size(), is(equalTo(30))); @@ -959,34 +897,13 @@ public class ElasticsearchTemplateTests { SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withIndices(INDEX_NAME) .withTypes(TYPE_NAME).withPageable(new PageRequest(0, 10)).build(); - String scrollId = elasticsearchTemplate.scan(searchQuery, 1000, false); + Page scroll = elasticsearchTemplate.startScroll(1000, searchQuery, SampleEntity.class,searchResultMapper); + String scrollId = ((ScrolledPage) scroll).getScrollId(); List sampleEntities = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = elasticsearchTemplate.scroll(scrollId, 5000L, new SearchResultMapper() { - @Override - public AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) { - List chunk = new ArrayList<>(); - for (SearchHit searchHit : response.getHits()) { - if (response.getHits().getHits().length <= 0) { - return null; - } - SampleEntity user = new SampleEntity(); - user.setId(searchHit.getId()); - user.setMessage((String) searchHit.getSource().get("message")); - chunk.add(user); - } - if (chunk.size() > 0) { - return new AggregatedPageImpl<>((List) chunk); - } - return null; - } - }); - if (page != null) { - sampleEntities.addAll(page.getContent()); - } else { - hasRecords = false; - } + while (scroll.hasContent()) { + sampleEntities.addAll(scroll.getContent()); + scrollId = ((ScrolledPage) scroll).getScrollId(); + scroll = elasticsearchTemplate.continueScroll(scrollId, 1000, SampleEntity.class, searchResultMapper); } elasticsearchTemplate.clearScroll(scrollId); assertThat(sampleEntities.size(), is(equalTo(30))); @@ -1007,16 +924,13 @@ public class ElasticsearchTemplateTests { CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); criteriaQuery.setPageable(new PageRequest(0, 10)); - String scrollId = elasticsearchTemplate.scan(criteriaQuery, 1000, false, SampleEntity.class); + Page scroll = elasticsearchTemplate.startScroll(1000, criteriaQuery, SampleEntity.class); + String scrollId = ((ScrolledPage) scroll).getScrollId(); List sampleEntities = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = elasticsearchTemplate.scroll(scrollId, 5000L, SampleEntity.class); - if (page.hasContent()) { - sampleEntities.addAll(page.getContent()); - } else { - hasRecords = false; - } + while (scroll.hasContent()) { + sampleEntities.addAll(scroll.getContent()); + scrollId = ((ScrolledPage) scroll).getScrollId(); + scroll = elasticsearchTemplate.continueScroll(scrollId, 1000, SampleEntity.class); } elasticsearchTemplate.clearScroll(scrollId); assertThat(sampleEntities.size(), is(equalTo(30))); @@ -1037,16 +951,13 @@ public class ElasticsearchTemplateTests { SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPageable(new PageRequest(0, 10)).build(); - String scrollId = elasticsearchTemplate.scan(searchQuery, 1000, false, SampleEntity.class); + Page scroll = elasticsearchTemplate.startScroll(1000, searchQuery, SampleEntity.class); + String scrollId = ((ScrolledPage) scroll).getScrollId(); List sampleEntities = new ArrayList<>(); - boolean hasRecords = true; - while (hasRecords) { - Page page = elasticsearchTemplate.scroll(scrollId, 5000L, SampleEntity.class); - if (page.hasContent()) { - sampleEntities.addAll(page.getContent()); - } else { - hasRecords = false; - } + while (scroll.hasContent()) { + sampleEntities.addAll(scroll.getContent()); + scrollId = ((ScrolledPage) scroll).getScrollId(); + scroll = elasticsearchTemplate.continueScroll(scrollId, 1000, SampleEntity.class); } elasticsearchTemplate.clearScroll(scrollId); assertThat(sampleEntities.size(), is(equalTo(30))); @@ -1175,6 +1086,7 @@ public class ElasticsearchTemplateTests { public void shouldPutMappingForGivenEntity() throws Exception { // given Class entity = SampleMappingEntity.class; + elasticsearchTemplate.deleteIndex(entity); elasticsearchTemplate.createIndex(entity); // when assertThat(elasticsearchTemplate.putMapping(entity), is(true)); @@ -1264,9 +1176,10 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.index(indexQuery); elasticsearchTemplate.refresh(SampleEntity.class); + final List message = new HighlightBuilder().field("message").fields(); SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(termQuery("message", "test")) - .withHighlightFields(new HighlightBuilder.Field("message")) + .withHighlightFields(message.toArray(new HighlightBuilder.Field[message.size()])) .build(); Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class, new SearchResultMapper() { @@ -1399,10 +1312,13 @@ public class ElasticsearchTemplateTests { // when SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(boolQuery().must(wildcardQuery("message", "*a*")).should(wildcardQuery("message", "*b*"))) + .withQuery(boolQuery() + .must(wildcardQuery("message", "*a*")) + .should(wildcardQuery("message", "*b*")) + ) .withIndices(INDEX_NAME) .withTypes(TYPE_NAME) - .withMinScore(0.5F) + .withMinScore(2.0F) .build(); Page page = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class); @@ -1571,7 +1487,7 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.index(indexQuery); elasticsearchTemplate.refresh(SampleEntity.class); CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); - criteriaQuery.addIndices("test-index"); + criteriaQuery.addIndices(INDEX_NAME); // when long count = elasticsearchTemplate.count(criteriaQuery); // then @@ -1593,7 +1509,7 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.refresh(SampleEntity.class); SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(matchAllQuery()) - .withIndices("test-index") + .withIndices(INDEX_NAME) .build(); // when long count = elasticsearchTemplate.count(searchQuery); @@ -1615,7 +1531,7 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.index(indexQuery); elasticsearchTemplate.refresh(SampleEntity.class); CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); - criteriaQuery.addIndices("test-index"); + criteriaQuery.addIndices(INDEX_NAME); criteriaQuery.addTypes("test-type"); // when long count = elasticsearchTemplate.count(criteriaQuery); @@ -1638,7 +1554,7 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.refresh(SampleEntity.class); SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(matchAllQuery()) - .withIndices("test-index") + .withIndices(INDEX_NAME) .withTypes("test-type") .build(); // when @@ -1952,11 +1868,12 @@ public class ElasticsearchTemplateTests { elasticsearchTemplate.deleteIndex(SampleEntity.class); elasticsearchTemplate.createIndex(SampleEntity.class, settings); + elasticsearchTemplate.putMapping(SampleEntity.class); elasticsearchTemplate.refresh(SampleEntity.class); // then Map map = elasticsearchTemplate.getSetting(SampleEntity.class); - assertThat(elasticsearchTemplate.indexExists("test-index"), is(true)); + assertThat(elasticsearchTemplate.indexExists(INDEX_NAME), is(true)); assertThat(map.containsKey("index.number_of_replicas"), is(true)); assertThat(map.containsKey("index.number_of_shards"), is(true)); assertThat((String) map.get("index.number_of_replicas"), is("0")); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/MappingBuilderTests.java b/src/test/java/org/springframework/data/elasticsearch/core/MappingBuilderTests.java index b888058aa..d47978b33 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/MappingBuilderTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/MappingBuilderTests.java @@ -33,14 +33,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.builder.SampleInheritedEntityBuilder; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.SearchQuery; +import org.springframework.data.elasticsearch.entities.*; import org.springframework.data.elasticsearch.entities.GeoEntity; -import org.springframework.data.elasticsearch.entities.Group; -import org.springframework.data.elasticsearch.entities.MinimalEntity; -import org.springframework.data.elasticsearch.entities.SampleInheritedEntity; -import org.springframework.data.elasticsearch.entities.SampleTransientEntity; -import org.springframework.data.elasticsearch.entities.SimpleRecursiveEntity; -import org.springframework.data.elasticsearch.entities.StockPrice; -import org.springframework.data.elasticsearch.entities.User; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -59,14 +53,16 @@ public class MappingBuilderTests { @Test public void shouldNotFailOnCircularReference() { + elasticsearchTemplate.deleteIndex(SimpleRecursiveEntity.class); elasticsearchTemplate.createIndex(SimpleRecursiveEntity.class); elasticsearchTemplate.putMapping(SimpleRecursiveEntity.class); + elasticsearchTemplate.refresh(SimpleRecursiveEntity.class); } @Test public void testInfiniteLoopAvoidance() throws IOException { final String expected = "{\"mapping\":{\"properties\":{\"message\":{\"store\":true,\"" + - "type\":\"string\",\"index\":\"not_analyzed\"," + + "type\":\"text\",\"index\":false," + "\"analyzer\":\"standard\"}}}}"; XContentBuilder xContentBuilder = MappingBuilder.buildMapping(SampleTransientEntity.class, "mapping", "id", null); @@ -121,9 +117,9 @@ public class MappingBuilderTests { @Test public void shouldBuildMappingWithSuperclass() throws IOException { final String expected = "{\"mapping\":{\"properties\":{\"message\":{\"store\":true,\"" + - "type\":\"string\",\"index\":\"not_analyzed\",\"analyzer\":\"standard\"}" + + "type\":\"text\",\"index\":false,\"analyzer\":\"standard\"}" + ",\"createdDate\":{\"store\":false," + - "\"type\":\"date\",\"index\":\"not_analyzed\"}}}}"; + "\"type\":\"date\",\"index\":false}}}}"; XContentBuilder xContentBuilder = MappingBuilder.buildMapping(SampleInheritedEntity.class, "mapping", "id", null); assertThat(xContentBuilder.string(), is(expected)); @@ -186,4 +182,15 @@ public class MappingBuilderTests { //then } + + @Test + public void shouldMapBooks() { + //given + elasticsearchTemplate.createIndex(Book.class); + elasticsearchTemplate.putMapping(Book.class); + //when + + //then + + } } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/SimpleElasticsearchDateMappingTests.java b/src/test/java/org/springframework/data/elasticsearch/core/SimpleElasticsearchDateMappingTests.java index 18e36f3ff..7ea2d1311 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/SimpleElasticsearchDateMappingTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/SimpleElasticsearchDateMappingTests.java @@ -30,7 +30,7 @@ import org.springframework.data.elasticsearch.entities.SampleDateMappingEntity; public class SimpleElasticsearchDateMappingTests { private static final String EXPECTED_MAPPING = "{\"mapping\":{\"properties\":{\"message\":{\"store\":true," + - "\"type\":\"string\",\"index\":\"not_analyzed\",\"analyzer\":\"standard\"},\"customFormatDate\":{\"store\":false,\"type\":\"date\",\"format\":\"dd.MM.yyyy hh:mm\"}," + + "\"type\":\"text\",\"index\":false,\"analyzer\":\"standard\"},\"customFormatDate\":{\"store\":false,\"type\":\"date\",\"format\":\"dd.MM.yyyy hh:mm\"}," + "\"defaultFormatDate\":{\"store\":false,\"type\":\"date\"},\"basicFormatDate\":{\"store\":false,\"" + "type\":\"date\",\"format\":\"basic_date\"}}}}"; diff --git a/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java index b439dca68..6cace5395 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java @@ -22,6 +22,7 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.search.SearchType; import org.elasticsearch.search.aggregations.Aggregations; import org.junit.Before; import org.junit.Test; @@ -36,6 +37,11 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilde import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; +import static org.elasticsearch.search.aggregations.AggregationBuilders.terms; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; /** * @author Rizwan Idrees @@ -81,8 +87,8 @@ public class ElasticsearchTemplateAggregationTests { // given SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(matchAllQuery()) - .withSearchType(COUNT) - .withIndices("articles").withTypes("article") + .withSearchType(SearchType.DEFAULT) + .withIndices("test-index-articles").withTypes("article") .addAggregation(terms("subjects").field("subject")) .build(); // when diff --git a/src/test/java/org/springframework/data/elasticsearch/core/completion/AnnotatedCompletionEntity.java b/src/test/java/org/springframework/data/elasticsearch/core/completion/AnnotatedCompletionEntity.java index 3a86f7b73..ced246f2f 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/completion/AnnotatedCompletionEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/completion/AnnotatedCompletionEntity.java @@ -7,14 +7,14 @@ import org.springframework.data.elasticsearch.annotations.Document; /** * @author Mewes Kochheim */ -@Document(indexName = "test-completion-index", type = "annotated-completion-type", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-annotated-completion", type = "annotated-completion-type", shards = 1, replicas = 0, refreshInterval = "-1") public class AnnotatedCompletionEntity { @Id private String id; private String name; - @CompletionField(payloads = true, maxInputLength = 100) + @CompletionField(maxInputLength = 100) private Completion suggest; private AnnotatedCompletionEntity() { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/completion/AnnotatedCompletionEntityBuilder.java b/src/test/java/org/springframework/data/elasticsearch/core/completion/AnnotatedCompletionEntityBuilder.java index a1aaa7440..ed6217149 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/completion/AnnotatedCompletionEntityBuilder.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/completion/AnnotatedCompletionEntityBuilder.java @@ -36,23 +36,12 @@ public class AnnotatedCompletionEntityBuilder { } public AnnotatedCompletionEntityBuilder suggest(String[] input) { - return suggest(input, null, null, null); + return suggest(input, null); } - public AnnotatedCompletionEntityBuilder suggest(String[] input, String output) { - return suggest(input, output, null, null); - } - - public AnnotatedCompletionEntityBuilder suggest(String[] input, String output, Object payload) { - return suggest(input, output, payload, null); - } - - public AnnotatedCompletionEntityBuilder suggest(String[] input, String output, Object payload, Integer weight) { + public AnnotatedCompletionEntityBuilder suggest(String[] input, Integer weight) { Completion suggest = new Completion(input); - suggest.setOutput(output); - suggest.setPayload(payload); suggest.setWeight(weight); - result.setSuggest(suggest); return this; } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionAnnotatedEntity.java b/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionAnnotatedEntity.java index fe34f1dbc..897db65da 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionAnnotatedEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionAnnotatedEntity.java @@ -9,14 +9,14 @@ import org.springframework.data.elasticsearch.annotations.Document; * @author Mohsin Husen * @author Mewes Kochheim */ -@Document(indexName = "test-completion-index", type = "completion-annotation-type", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-completion-annotated", type = "completion-annotation-type", shards = 1, replicas = 0, refreshInterval = "-1") public class CompletionAnnotatedEntity { @Id private String id; private String name; - @CompletionField(payloads = true) + @CompletionField private Completion suggest; private CompletionAnnotatedEntity() { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntity.java b/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntity.java index 05c2a6f12..ed67d6bcb 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntity.java @@ -7,7 +7,7 @@ import org.springframework.data.elasticsearch.annotations.Document; /** * @author Mewes Kochheim */ -@Document(indexName = "test-completion-index", type = "completion-type", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-completion", type = "completion-type", shards = 1, replicas = 0, refreshInterval = "-1") public class CompletionEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntityAnnotatedBuilder.java b/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntityAnnotatedBuilder.java index 0888a5fc7..f075c32cf 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntityAnnotatedBuilder.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntityAnnotatedBuilder.java @@ -36,25 +36,11 @@ public class CompletionEntityAnnotatedBuilder { } public CompletionEntityAnnotatedBuilder suggest(String[] input) { - return suggest(input, null, null, null); + return suggest(input, null); } - public CompletionEntityAnnotatedBuilder suggest(String[] input, String output) { - return suggest(input, output, null, null); - } - - public CompletionEntityAnnotatedBuilder suggest(String[] input, String output, Object payload) { - return suggest(input, output, payload, null); - } - - public CompletionEntityAnnotatedBuilder suggest(String[] input, String output, Object payload, Integer weight) { + public CompletionEntityAnnotatedBuilder suggest(String[] input, Integer weight) { Completion suggest = new Completion(input); - if (output != null) { - suggest.setOutput(output); - } - if (payload != null) { - suggest.setPayload(payload); - } if (weight != null) { suggest.setWeight(weight); } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntityBuilder.java b/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntityBuilder.java index 08e4ba6e3..9d0db0951 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntityBuilder.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/completion/CompletionEntityBuilder.java @@ -34,21 +34,11 @@ public class CompletionEntityBuilder { } public CompletionEntityBuilder suggest(String[] input) { - return suggest(input, null, null, null); + return suggest(input, null); } - public CompletionEntityBuilder suggest(String[] input, String output) { - return suggest(input, output, null, null); - } - - public CompletionEntityBuilder suggest(String[] input, String output, Object payload) { - return suggest(input, output, payload, null); - } - - public CompletionEntityBuilder suggest(String[] input, String output, Object payload, Integer weight) { + public CompletionEntityBuilder suggest(String[] input, Integer weight) { Completion suggest = new Completion(input); - suggest.setOutput(output); - suggest.setPayload(payload); suggest.setWeight(weight); result.setSuggest(suggest); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/completion/ElasticsearchTemplateCompletionTests.java b/src/test/java/org/springframework/data/elasticsearch/core/completion/ElasticsearchTemplateCompletionTests.java index 1f4b0f2f0..b83d52b52 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/completion/ElasticsearchTemplateCompletionTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/completion/ElasticsearchTemplateCompletionTests.java @@ -22,9 +22,13 @@ import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; -import org.elasticsearch.action.suggest.SuggestResponse; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.common.unit.Fuzziness; +import org.elasticsearch.search.suggest.SuggestBuilder; +import org.elasticsearch.search.suggest.SuggestBuilders; +import org.elasticsearch.search.suggest.SuggestionBuilder; import org.elasticsearch.search.suggest.completion.CompletionSuggestion; -import org.elasticsearch.search.suggest.completion.CompletionSuggestionFuzzyBuilder; +import org.elasticsearch.search.suggest.completion.CompletionSuggestionBuilder; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -34,6 +38,13 @@ import org.springframework.data.elasticsearch.entities.NonDocumentEntity; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.util.ArrayList; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertEquals; + /** * @author Rizwan Idrees * @author Mohsin Husen @@ -57,8 +68,8 @@ public class ElasticsearchTemplateCompletionTests { List indexQueries = new ArrayList<>(); indexQueries.add(new CompletionEntityBuilder("1").name("Rizwan Idrees").suggest(new String[]{"Rizwan Idrees"}).buildIndex()); indexQueries.add(new CompletionEntityBuilder("2").name("Franck Marchand").suggest(new String[]{"Franck", "Marchand"}).buildIndex()); - indexQueries.add(new CompletionEntityBuilder("3").name("Mohsin Husen").suggest(new String[]{"Mohsin", "Husen"}, "Mohsin Husen").buildIndex()); - indexQueries.add(new CompletionEntityBuilder("4").name("Artur Konczak").suggest(new String[]{"Artur", "Konczak"}, "Artur Konczak").buildIndex()); + indexQueries.add(new CompletionEntityBuilder("3").name("Mohsin Husen").suggest(new String[]{"Mohsin", "Husen"}).buildIndex()); + indexQueries.add(new CompletionEntityBuilder("4").name("Artur Konczak").suggest(new String[]{"Artur", "Konczak"}).buildIndex()); elasticsearchTemplate.bulkIndex(indexQueries); elasticsearchTemplate.refresh(CompletionEntity.class); @@ -76,29 +87,9 @@ public class ElasticsearchTemplateCompletionTests { List indexQueries = new ArrayList<>(); indexQueries.add(new AnnotatedCompletionEntityBuilder("1").name("Franck Marchand").suggest(new String[]{"Franck", "Marchand"}).buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("2").name("Mohsin Husen").suggest(new String[]{"Mohsin", "Husen"}, "Mohsin Husen").buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("3").name("Rizwan Idrees").suggest(new String[]{"Rizwan", "Idrees"}, "Rizwan Idrees").buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("4").name("Artur Konczak").suggest(new String[]{"Artur", "Konczak"}, "Artur Konczak").buildIndex()); - - elasticsearchTemplate.bulkIndex(indexQueries); - elasticsearchTemplate.refresh(AnnotatedCompletionEntity.class); - } - - private void loadAnnotatedCompletionObjectEntitiesWithPayloads() { - elasticsearchTemplate.deleteIndex(AnnotatedCompletionEntity.class); - elasticsearchTemplate.createIndex(AnnotatedCompletionEntity.class); - elasticsearchTemplate.refresh(AnnotatedCompletionEntity.class); - elasticsearchTemplate.putMapping(AnnotatedCompletionEntity.class); - - NonDocumentEntity nonDocumentEntity = new NonDocumentEntity(); - nonDocumentEntity.setSomeField1("Payload"); - nonDocumentEntity.setSomeField2("test"); - - List indexQueries = new ArrayList<>(); - indexQueries.add(new AnnotatedCompletionEntityBuilder("1").name("Mewes Kochheim1").suggest(new String[]{"Mewes Kochheim1"}, null, Double.MAX_VALUE).buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("2").name("Mewes Kochheim2").suggest(new String[]{"Mewes Kochheim2"}, null, Long.MAX_VALUE).buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("3").name("Mewes Kochheim3").suggest(new String[]{"Mewes Kochheim3"}, null, "Payload test").buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("4").name("Mewes Kochheim4").suggest(new String[]{"Mewes Kochheim4"}, null, nonDocumentEntity).buildIndex()); + indexQueries.add(new AnnotatedCompletionEntityBuilder("2").name("Mohsin Husen").suggest(new String[]{"Mohsin", "Husen"}).buildIndex()); + indexQueries.add(new AnnotatedCompletionEntityBuilder("3").name("Rizwan Idrees").suggest(new String[]{"Rizwan", "Idrees"}).buildIndex()); + indexQueries.add(new AnnotatedCompletionEntityBuilder("4").name("Artur Konczak").suggest(new String[]{"Artur", "Konczak"}).buildIndex()); elasticsearchTemplate.bulkIndex(indexQueries); elasticsearchTemplate.refresh(AnnotatedCompletionEntity.class); @@ -107,14 +98,14 @@ public class ElasticsearchTemplateCompletionTests { private void loadAnnotatedCompletionObjectEntitiesWithWeights() { elasticsearchTemplate.deleteIndex(AnnotatedCompletionEntity.class); elasticsearchTemplate.createIndex(AnnotatedCompletionEntity.class); - elasticsearchTemplate.refresh(AnnotatedCompletionEntity.class); elasticsearchTemplate.putMapping(AnnotatedCompletionEntity.class); + elasticsearchTemplate.refresh(AnnotatedCompletionEntity.class); List indexQueries = new ArrayList<>(); - indexQueries.add(new AnnotatedCompletionEntityBuilder("1").name("Mewes Kochheim1").suggest(new String[]{"Mewes Kochheim1"}).buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("2").name("Mewes Kochheim2").suggest(new String[]{"Mewes Kochheim2"}, null, null, 0).buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("3").name("Mewes Kochheim3").suggest(new String[]{"Mewes Kochheim3"}, null, null, 1).buildIndex()); - indexQueries.add(new AnnotatedCompletionEntityBuilder("4").name("Mewes Kochheim4").suggest(new String[]{"Mewes Kochheim4"}, null, null, Integer.MAX_VALUE).buildIndex()); + indexQueries.add(new AnnotatedCompletionEntityBuilder("1").name("Mewes Kochheim1").suggest(new String[]{"Mewes Kochheim1"},4).buildIndex()); + indexQueries.add(new AnnotatedCompletionEntityBuilder("2").name("Mewes Kochheim2").suggest(new String[]{"Mewes Kochheim2"}, 1).buildIndex()); + indexQueries.add(new AnnotatedCompletionEntityBuilder("3").name("Mewes Kochheim3").suggest(new String[]{"Mewes Kochheim3"}, 2).buildIndex()); + indexQueries.add(new AnnotatedCompletionEntityBuilder("4").name("Mewes Kochheim4").suggest(new String[]{"Mewes Kochheim4"}, Integer.MAX_VALUE).buildIndex()); elasticsearchTemplate.bulkIndex(indexQueries); elasticsearchTemplate.refresh(AnnotatedCompletionEntity.class); @@ -134,81 +125,45 @@ public class ElasticsearchTemplateCompletionTests { public void shouldFindSuggestionsForGivenCriteriaQueryUsingCompletionEntity() { //given loadCompletionObjectEntities(); - CompletionSuggestionFuzzyBuilder completionSuggestionFuzzyBuilder = new CompletionSuggestionFuzzyBuilder("test-suggest") - .text("m") - .field("suggest"); + + SuggestionBuilder completionSuggestionFuzzyBuilder = SuggestBuilders.completionSuggestion("suggest").prefix("m", Fuzziness.AUTO); //when - SuggestResponse suggestResponse = elasticsearchTemplate.suggest(completionSuggestionFuzzyBuilder, CompletionEntity.class); + final SearchResponse suggestResponse = elasticsearchTemplate.suggest(new SuggestBuilder().addSuggestion("test-suggest",completionSuggestionFuzzyBuilder), CompletionEntity.class); CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest"); List options = completionSuggestion.getEntries().get(0).getOptions(); //then assertThat(options.size(), is(2)); - assertThat(options.get(0).getText().string(), isOneOf("Marchand", "Mohsin Husen")); - assertThat(options.get(1).getText().string(), isOneOf("Marchand", "Mohsin Husen")); + assertThat(options.get(0).getText().string(), isOneOf("Marchand", "Mohsin")); + assertThat(options.get(1).getText().string(), isOneOf("Marchand", "Mohsin")); } @Test public void shouldFindSuggestionsForGivenCriteriaQueryUsingAnnotatedCompletionEntity() { //given loadAnnotatedCompletionObjectEntities(); - CompletionSuggestionFuzzyBuilder completionSuggestionFuzzyBuilder = new CompletionSuggestionFuzzyBuilder("test-suggest") - .text("m") - .field("suggest"); + SuggestionBuilder completionSuggestionFuzzyBuilder = SuggestBuilders.completionSuggestion("suggest").prefix("m", Fuzziness.AUTO); //when - SuggestResponse suggestResponse = elasticsearchTemplate.suggest(completionSuggestionFuzzyBuilder, CompletionEntity.class); + final SearchResponse suggestResponse = elasticsearchTemplate.suggest(new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder), CompletionEntity.class); CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest"); List options = completionSuggestion.getEntries().get(0).getOptions(); //then assertThat(options.size(), is(2)); - assertThat(options.get(0).getText().string(), isOneOf("Marchand", "Mohsin Husen")); - assertThat(options.get(1).getText().string(), isOneOf("Marchand", "Mohsin Husen")); - } - - @Test - public void shouldFindSuggestionsWithPayloadsForGivenCriteriaQueryUsingAnnotatedCompletionEntity() { - //given - loadAnnotatedCompletionObjectEntitiesWithPayloads(); - CompletionSuggestionFuzzyBuilder completionSuggestionFuzzyBuilder = new CompletionSuggestionFuzzyBuilder("test-suggest") - .text("m") - .field("suggest"); - - //when - SuggestResponse suggestResponse = elasticsearchTemplate.suggest(completionSuggestionFuzzyBuilder, CompletionEntity.class); - CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest"); - List options = completionSuggestion.getEntries().get(0).getOptions(); - - //then - assertThat(options.size(), is(4)); - for (CompletionSuggestion.Entry.Option option : options) { - if (option.getText().string().equals("Mewes Kochheim1")) { - assertEquals(Double.MAX_VALUE, option.getPayloadAsDouble(), 0); - } else if (option.getText().string().equals("Mewes Kochheim2")) { - assertEquals(Long.MAX_VALUE, option.getPayloadAsLong()); - } else if (option.getText().string().equals("Mewes Kochheim3")) { - assertEquals("Payload test", option.getPayloadAsString()); - } else if (option.getText().string().equals("Mewes Kochheim4")) { - assertEquals("Payload", option.getPayloadAsMap().get("someField1")); - assertEquals("test", option.getPayloadAsMap().get("someField2")); - } else { - fail("Unexpected option"); - } - } + assertThat(options.get(0).getText().string(), isOneOf("Marchand", "Mohsin")); + assertThat(options.get(1).getText().string(), isOneOf("Marchand", "Mohsin")); } @Test public void shouldFindSuggestionsWithWeightsForGivenCriteriaQueryUsingAnnotatedCompletionEntity() { //given loadAnnotatedCompletionObjectEntitiesWithWeights(); - CompletionSuggestionFuzzyBuilder completionSuggestionFuzzyBuilder = new CompletionSuggestionFuzzyBuilder("test-suggest") - .text("m") - .field("suggest"); + SuggestionBuilder completionSuggestionFuzzyBuilder = SuggestBuilders.completionSuggestion("suggest").prefix("m", Fuzziness.AUTO); //when - SuggestResponse suggestResponse = elasticsearchTemplate.suggest(completionSuggestionFuzzyBuilder, CompletionEntity.class); + final SearchResponse suggestResponse = elasticsearchTemplate.suggest(new SuggestBuilder().addSuggestion("test-suggest",completionSuggestionFuzzyBuilder), AnnotatedCompletionEntity.class); CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest"); List options = completionSuggestion.getEntries().get(0).getOptions(); @@ -218,9 +173,9 @@ public class ElasticsearchTemplateCompletionTests { if (option.getText().string().equals("Mewes Kochheim1")) { assertEquals(4, option.getScore(), 0); } else if (option.getText().string().equals("Mewes Kochheim2")) { - assertEquals(0, option.getScore(), 0); - } else if (option.getText().string().equals("Mewes Kochheim3")) { assertEquals(1, option.getScore(), 0); + } else if (option.getText().string().equals("Mewes Kochheim3")) { + assertEquals(2, option.getScore(), 0); } else if (option.getText().string().equals("Mewes Kochheim4")) { assertEquals(Integer.MAX_VALUE, option.getScore(), 0); } else { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/facet/ArticleEntity.java b/src/test/java/org/springframework/data/elasticsearch/core/facet/ArticleEntity.java index 05ae50002..3e1379c25 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/facet/ArticleEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/facet/ArticleEntity.java @@ -15,17 +15,14 @@ */ package org.springframework.data.elasticsearch.core.facet; -import static org.springframework.data.elasticsearch.annotations.FieldIndex.*; -import static org.springframework.data.elasticsearch.annotations.FieldType.*; +import static org.springframework.data.elasticsearch.annotations.FieldType.Integer; +import static org.springframework.data.elasticsearch.annotations.FieldType.text; import java.util.ArrayList; import java.util.List; import org.springframework.data.annotation.Id; -import org.springframework.data.elasticsearch.annotations.Document; -import org.springframework.data.elasticsearch.annotations.Field; -import org.springframework.data.elasticsearch.annotations.InnerField; -import org.springframework.data.elasticsearch.annotations.MultiField; +import org.springframework.data.elasticsearch.annotations.*; /** * Simple type to test facets @@ -33,19 +30,20 @@ import org.springframework.data.elasticsearch.annotations.MultiField; * @author Artur Konczak * @author Mohsin Husen */ -@Document(indexName = "articles", type = "article", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-articles", type = "article", shards = 1, replicas = 0, refreshInterval = "-1") public class ArticleEntity { @Id private String id; private String title; + @Field(type = text, fielddata = true) private String subject; @MultiField( - mainField = @Field(type = String, index = analyzed), + mainField = @Field(type = text), otherFields = { - @InnerField(suffix = "untouched", type = String, store = true, index = not_analyzed), - @InnerField(suffix = "sort", type = String, store = true, indexAnalyzer = "keyword") + @InnerField(suffix = "untouched", type = text, store = true, fielddata = true, indexAnalyzer = "keyword"), + @InnerField(suffix = "sort", type = text, store = true, indexAnalyzer = "keyword") } ) private List authors = new ArrayList<>(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/facet/ElasticsearchTemplateFacetTests.java b/src/test/java/org/springframework/data/elasticsearch/core/facet/ElasticsearchTemplateFacetTests.java index 6f61bc5bd..736783f4d 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/facet/ElasticsearchTemplateFacetTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/facet/ElasticsearchTemplateFacetTests.java @@ -20,24 +20,17 @@ import static org.elasticsearch.index.query.QueryBuilders.*; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; +import org.elasticsearch.index.query.QueryBuilder; +import org.elasticsearch.index.query.QueryBuilders; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.FacetedPage; -import org.springframework.data.elasticsearch.core.facet.request.HistogramFacetRequestBuilder; -import org.springframework.data.elasticsearch.core.facet.request.NativeFacetRequest; -import org.springframework.data.elasticsearch.core.facet.request.RangeFacetRequestBuilder; -import org.springframework.data.elasticsearch.core.facet.request.StatisticalFacetRequestBuilder; -import org.springframework.data.elasticsearch.core.facet.request.TermFacetRequestBuilder; -import org.springframework.data.elasticsearch.core.facet.result.HistogramResult; -import org.springframework.data.elasticsearch.core.facet.result.IntervalUnit; -import org.springframework.data.elasticsearch.core.facet.result.Range; -import org.springframework.data.elasticsearch.core.facet.result.RangeResult; -import org.springframework.data.elasticsearch.core.facet.result.StatisticalResult; -import org.springframework.data.elasticsearch.core.facet.result.Term; -import org.springframework.data.elasticsearch.core.facet.result.TermResult; +import org.springframework.data.elasticsearch.core.facet.request.*; +import org.springframework.data.elasticsearch.core.facet.result.*; +import org.springframework.data.elasticsearch.core.query.DeleteQuery; import org.springframework.data.elasticsearch.core.query.IndexQuery; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.SearchQuery; @@ -260,15 +253,15 @@ public class ElasticsearchTemplateFacetTests { assertThat(facet.getTerms().size(), is(equalTo(3))); Term term = facet.getTerms().get(0); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2000))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2000))); assertThat(term.getCount(), is(3l)); term = facet.getTerms().get(1); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2001))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2001))); assertThat(term.getCount(), is(2l)); term = facet.getTerms().get(2); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2002))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2002))); assertThat(term.getCount(), is(1l)); assertThat(facet.getTotal(), is(3l)); @@ -292,15 +285,15 @@ public class ElasticsearchTemplateFacetTests { assertThat(facet.getTerms().size(), is(equalTo(3))); Term term = facet.getTerms().get(0); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2000))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2000))); assertThat(term.getCount(), is(3l)); term = facet.getTerms().get(1); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2001))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2001))); assertThat(term.getCount(), is(2l)); term = facet.getTerms().get(2); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2002))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2002))); assertThat(term.getCount(), is(1l)); assertThat(facet.getTotal(), is(3l)); @@ -325,15 +318,15 @@ public class ElasticsearchTemplateFacetTests { assertThat(facet.getTerms().size(), is(equalTo(7))); Term term = facet.getTerms().get(0); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2000))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2000))); assertThat(term.getCount(), is(3l)); term = facet.getTerms().get(1); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2001))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2001))); assertThat(term.getCount(), is(2l)); term = facet.getTerms().get(2); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2002))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2002))); assertThat(term.getCount(), is(1l)); term = facet.getTerms().get(3); @@ -376,15 +369,15 @@ public class ElasticsearchTemplateFacetTests { assertThat(numberFacet.getTerms().size(), is(equalTo(3))); Term numberTerm = numberFacet.getTerms().get(0); - assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2000))); + assertThat(numberTerm.getTerm(), is(Long.toString(YEAR_2000))); assertThat(numberTerm.getCount(), is(3l)); numberTerm = numberFacet.getTerms().get(1); - assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2001))); + assertThat(numberTerm.getTerm(), is(Long.toString(YEAR_2001))); assertThat(numberTerm.getCount(), is(2l)); numberTerm = numberFacet.getTerms().get(2); - assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2002))); + assertThat(numberTerm.getTerm(), is(Long.toString(YEAR_2002))); assertThat(numberTerm.getCount(), is(1l)); TermResult stringFacet = (TermResult) result.getFacet(stringFacetName); @@ -426,15 +419,15 @@ public class ElasticsearchTemplateFacetTests { assertThat(facet.getTerms().size(), is(equalTo(3))); Term term = facet.getTerms().get(0); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2000))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2000))); assertThat(term.getCount(), is(3l)); term = facet.getTerms().get(1); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2001))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2001))); assertThat(term.getCount(), is(2l)); term = facet.getTerms().get(2); - assertThat(term.getTerm(), is(Integer.toString(YEAR_2002))); + assertThat(term.getTerm(), is(Long.toString(YEAR_2002))); assertThat(term.getCount(), is(1l)); assertThat(facet.getTotal(), is(6l)); @@ -469,6 +462,7 @@ public class ElasticsearchTemplateFacetTests { @Test public void shouldReturnAllTermsForGivenQuery() { // given + String facetName = "all_authors"; SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched").allTerms().build()).build(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/facet/ElasticsearchTemplateHistogramFacetTests.java b/src/test/java/org/springframework/data/elasticsearch/core/facet/ElasticsearchTemplateHistogramFacetTests.java index a4ebef266..11f93c631 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/facet/ElasticsearchTemplateHistogramFacetTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/facet/ElasticsearchTemplateHistogramFacetTests.java @@ -55,9 +55,9 @@ public class ElasticsearchTemplateHistogramFacetTests { public static final long SEQUECE_CODE_UPDATE = 2; public static final long SEQUECE_CODE_DELETE = 3; public static final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - public static final String DATE_18 = "2013-10-18 18:01"; - public static final String DATE_17 = "2013-10-18 17:01"; - public static final String DATE_16 = "2013-10-18 16:01"; + public static final text DATE_18 = "2013-10-18 18:01"; + public static final text DATE_17 = "2013-10-18 17:01"; + public static final text DATE_16 = "2013-10-18 16:01"; @Autowired @@ -87,7 +87,7 @@ public class ElasticsearchTemplateHistogramFacetTests { @Test public void shouldReturnSimpleHistogramFacetForGivenQuery() { // given - String facetName = "sequenceCodeFacet"; + text facetName = "sequenceCodeFacet"; SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withFacet(new HistogramFacetRequestBuilder(facetName).field("sequenceCode").interval(1).build() ).build(); @@ -115,7 +115,7 @@ public class ElasticsearchTemplateHistogramFacetTests { @Test public void shouldReturnDateHistogramFacetForGivenQuery() throws ParseException { // given - String facetName = "sequenceCodeFacet"; + text facetName = "sequenceCodeFacet"; SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withFacet(new HistogramFacetRequestBuilder(facetName).field("date").interval(1).timeUnit(TimeUnit.HOURS).build() ).build(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/facet/LogEntity.java b/src/test/java/org/springframework/data/elasticsearch/core/facet/LogEntity.java index adf5cf8b7..fe5845692 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/facet/LogEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/facet/LogEntity.java @@ -31,7 +31,7 @@ import org.springframework.data.elasticsearch.annotations.Field; * @author Mohsin Husen */ -@Document(indexName = "test-log-index", type = "test-log-type", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-log", type = "test-log-type", shards = 1, replicas = 0, refreshInterval = "-1") public class LogEntity { private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/geo/AuthorMarkerEntity.java b/src/test/java/org/springframework/data/elasticsearch/core/geo/AuthorMarkerEntity.java index a1b32775c..82be3b62e 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/geo/AuthorMarkerEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/geo/AuthorMarkerEntity.java @@ -22,7 +22,7 @@ import org.springframework.data.elasticsearch.annotations.Document; * @author Franck Marchand * @author Mohsin Husen */ -@Document(indexName = "test-geo-index", type = "geo-class-point-type", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-author-marker", type = "geo-class-point-type", shards = 1, replicas = 0, refreshInterval = "-1") public class AuthorMarkerEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/core/geo/ElasticsearchTemplateGeoTests.java b/src/test/java/org/springframework/data/elasticsearch/core/geo/ElasticsearchTemplateGeoTests.java index 439a5717c..97c860258 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/geo/ElasticsearchTemplateGeoTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/geo/ElasticsearchTemplateGeoTests.java @@ -15,13 +15,9 @@ */ package org.springframework.data.elasticsearch.core.geo; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; - import java.util.ArrayList; import java.util.List; - +import org.elasticsearch.common.geo.GeoHashUtils; import org.elasticsearch.index.query.QueryBuilders; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,14 +30,24 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilde import org.springframework.data.geo.Point; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import com.spatial4j.core.io.GeohashUtils; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; /** * @author Rizwan Idrees * @author Mohsin Husen * @author Franck Marchand * @author Artur Konczak + * + * Basic info: + * latitude - horizontal lines (equator = 0.0, values -90.0 to 90.0) + * longitude - vertical lines (Greenwich = 0.0, values -180 to 180) + * London [lat,lon] = [51.50985,-0.118082] - geohash = gcpvj3448 + * Bouding Box for London = (bbox=-0.489,51.28,0.236,51.686) + * bbox = left,bottom,right,top + * bbox = min Longitude , min Latitude , max Longitude , max Latitude + * */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:elasticsearch-template-test.xml") @@ -53,8 +59,8 @@ public class ElasticsearchTemplateGeoTests { private void loadClassBaseEntities() { elasticsearchTemplate.deleteIndex(AuthorMarkerEntity.class); elasticsearchTemplate.createIndex(AuthorMarkerEntity.class); - elasticsearchTemplate.refresh(AuthorMarkerEntity.class); elasticsearchTemplate.putMapping(AuthorMarkerEntity.class); + elasticsearchTemplate.refresh(AuthorMarkerEntity.class); List indexQueries = new ArrayList<>(); indexQueries.add(new AuthorMarkerEntityBuilder("1").name("Franck Marchand").location(45.7806d, 3.0875d).buildIndex()); @@ -67,37 +73,38 @@ public class ElasticsearchTemplateGeoTests { private void loadAnnotationBaseEntities() { elasticsearchTemplate.deleteIndex(LocationMarkerEntity.class); elasticsearchTemplate.createIndex(LocationMarkerEntity.class); - elasticsearchTemplate.refresh(LocationMarkerEntity.class); elasticsearchTemplate.putMapping(LocationMarkerEntity.class); + elasticsearchTemplate.refresh(LocationMarkerEntity.class); List indexQueries = new ArrayList<>(); - double[] latLonArray = {0.100000, 51.000000}; - String lonLatString = "51.000000, 0.100000"; - String geohash = "u1044k2bd6u"; + double[] lonLatArray = {0.100000, 51.000000}; + String latLonString = "51.000000, 0.100000"; + String geohash = "u10j46mkfekr"; + GeoHashUtils.stringEncode(0.100000,51.000000); LocationMarkerEntity location1 = LocationMarkerEntity.builder() .id("1").name("Artur Konczak") - .locationAsString(lonLatString) - .locationAsArray(latLonArray) - .locationWithPrefixAsDistance(geohash) - .locationWithPrefixAsLengthOfGeoHash(geohash) + .locationAsString(latLonString) + .locationAsArray(lonLatArray) + .locationAsGeoHash(geohash) .build(); LocationMarkerEntity location2 = LocationMarkerEntity.builder() .id("2").name("Mohsin Husen") - .locationAsString(geohash.substring(0, 5)) - .locationAsArray(latLonArray) + .locationAsString(geohash.substring(0, 8)) + .locationAsArray(lonLatArray) + .locationAsGeoHash(geohash.substring(0, 8)) .build(); LocationMarkerEntity location3 = LocationMarkerEntity.builder() .id("3").name("Rizwan Idrees") .locationAsString(geohash) - .locationAsArray(latLonArray) - .locationWithPrefixAsLengthOfGeoHash(geohash) + .locationAsArray(lonLatArray) + .locationAsGeoHash(geohash) .build(); indexQueries.add(buildIndex(location1)); indexQueries.add(buildIndex(location2)); indexQueries.add(buildIndex(location3)); elasticsearchTemplate.bulkIndex(indexQueries); - elasticsearchTemplate.refresh(AuthorMarkerEntity.class); + elasticsearchTemplate.refresh(LocationMarkerEntity.class); } @Test @@ -147,7 +154,7 @@ public class ElasticsearchTemplateGeoTests { List geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery, LocationMarkerEntity.class); //then - assertThat(geoAuthorsForGeoCriteria.size(), is(2)); + assertThat(geoAuthorsForGeoCriteria.size(), is(1)); } @Test @@ -193,7 +200,7 @@ public class ElasticsearchTemplateGeoTests { public void shouldFindAllMarkersForNativeSearchQuery() { //Given loadAnnotationBaseEntities(); - NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoBoundingBoxQuery("locationAsArray").topLeft(52, -1).bottomRight(50, 1)); + NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoBoundingBoxQuery("locationAsArray").setCorners(52, -1, 50, 1)); //When List geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(queryBuilder.build(), LocationMarkerEntity.class); //Then @@ -223,7 +230,7 @@ public class ElasticsearchTemplateGeoTests { //given loadClassBaseEntities(); CriteriaQuery geoLocationCriteriaQuery3 = new CriteriaQuery( - new Criteria("location").boundedBy(GeohashUtils.encodeLatLon(53.5171d, 0), GeohashUtils.encodeLatLon(49.5171d, 0.2062d))); + new Criteria("location").boundedBy(GeoHashUtils.stringEncode(0, 53.5171d), GeoHashUtils.stringEncode(0.2062d, 49.5171d))); //when List geoAuthorsForGeoCriteria3 = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery3, AuthorMarkerEntity.class); @@ -270,34 +277,29 @@ public class ElasticsearchTemplateGeoTests { public void shouldFindLocationWithGeoHashPrefix() { //given - //u1044k2bd6u - with precision = 4 -> u, u1, u10, u104 - //u1044k2bd6u - with precision = 5 -> u, u1, u10, u104, u1044 - loadAnnotationBaseEntities(); - NativeSearchQueryBuilder locationWithPrefixAsDistancePrecision3 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoHashCellQuery("box-one").field("locationWithPrefixAsDistance").geohash("u1044k2bd6u").precision(3)); - NativeSearchQueryBuilder locationWithPrefixAsDistancePrecision4 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoHashCellQuery("box-one").field("locationWithPrefixAsDistance").geohash("u1044k2bd6u").precision(4)); - NativeSearchQueryBuilder locationWithPrefixAsDistancePrecision5 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoHashCellQuery("box-one").field("locationWithPrefixAsDistance").geohash("u1044k2bd6u").precision(5)); + NativeSearchQueryBuilder location1 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoBoundingBoxQuery("locationAsGeoHash").setCorners("u")); + NativeSearchQueryBuilder location2 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoBoundingBoxQuery("locationAsGeoHash").setCorners("u1")); + NativeSearchQueryBuilder location3 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoBoundingBoxQuery("locationAsGeoHash").setCorners("u10")); + NativeSearchQueryBuilder location4 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoBoundingBoxQuery("locationAsGeoHash").setCorners("u10j")); + NativeSearchQueryBuilder location5 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoBoundingBoxQuery("locationAsGeoHash").setCorners("u10j4")); + NativeSearchQueryBuilder location11 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoBoundingBoxQuery("locationAsGeoHash").setCorners("u10j46mkfek")); - NativeSearchQueryBuilder locationWithPrefixAsLengthOfGeoHashPrecision4 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoHashCellQuery("box-one").field("locationWithPrefixAsLengthOfGeoHash").geohash("u1044k2bd6u").precision(4)); - NativeSearchQueryBuilder locationWithPrefixAsLengthOfGeoHashPrecision5 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoHashCellQuery("box-one").field("locationWithPrefixAsLengthOfGeoHash").geohash("u1044k2bd6u").precision(5)); - NativeSearchQueryBuilder locationWithPrefixAsLengthOfGeoHashPrecision6 = new NativeSearchQueryBuilder().withFilter(QueryBuilders.geoHashCellQuery("box-one").field("locationWithPrefixAsLengthOfGeoHash").geohash("u1044k2bd6u").precision(6)); //when - List resultDistancePrecision3 = elasticsearchTemplate.queryForList(locationWithPrefixAsDistancePrecision3.build(), LocationMarkerEntity.class); - List resultDistancePrecision4 = elasticsearchTemplate.queryForList(locationWithPrefixAsDistancePrecision4.build(), LocationMarkerEntity.class); - List resultDistancePrecision5 = elasticsearchTemplate.queryForList(locationWithPrefixAsDistancePrecision5.build(), LocationMarkerEntity.class); - - List resultGeoHashLengthPrecision4 = elasticsearchTemplate.queryForList(locationWithPrefixAsLengthOfGeoHashPrecision4.build(), LocationMarkerEntity.class); - List resultGeoHashLengthPrecision5 = elasticsearchTemplate.queryForList(locationWithPrefixAsLengthOfGeoHashPrecision5.build(), LocationMarkerEntity.class); - List resultGeoHashLengthPrecision6 = elasticsearchTemplate.queryForList(locationWithPrefixAsLengthOfGeoHashPrecision6.build(), LocationMarkerEntity.class); + List result1 = elasticsearchTemplate.queryForList(location1.build(), LocationMarkerEntity.class); + List result2 = elasticsearchTemplate.queryForList(location2.build(), LocationMarkerEntity.class); + List result3 = elasticsearchTemplate.queryForList(location3.build(), LocationMarkerEntity.class); + List result4 = elasticsearchTemplate.queryForList(location4.build(), LocationMarkerEntity.class); + List result5 = elasticsearchTemplate.queryForList(location5.build(), LocationMarkerEntity.class); + List result11 = elasticsearchTemplate.queryForList(location11.build(), LocationMarkerEntity.class); //then - assertThat(resultDistancePrecision3.size(), is(1)); - assertThat(resultDistancePrecision4.size(), is(1)); - assertThat(resultDistancePrecision5.size(), is(0)); - - assertThat(resultGeoHashLengthPrecision4.size(), is(2)); - assertThat(resultGeoHashLengthPrecision5.size(), is(2)); - assertThat(resultGeoHashLengthPrecision6.size(), is(0)); + assertThat(result1.size(), is(3)); + assertThat(result2.size(), is(3)); + assertThat(result3.size(), is(3)); + assertThat(result4.size(), is(3)); + assertThat(result5.size(), is(3)); + assertThat(result11.size(), is(2)); } private IndexQuery buildIndex(LocationMarkerEntity result) { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/geo/LocationMarkerEntity.java b/src/test/java/org/springframework/data/elasticsearch/core/geo/LocationMarkerEntity.java index 26bb5468b..2d53a3123 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/geo/LocationMarkerEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/geo/LocationMarkerEntity.java @@ -33,22 +33,19 @@ import org.springframework.data.elasticsearch.annotations.GeoPointField; @NoArgsConstructor @AllArgsConstructor @Builder -@Document(indexName = "test-geo-index", type = "geo-annotation-point-type", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-location-marker", type = "geo-annotation-point-type", shards = 1, replicas = 0, refreshInterval = "-1") public class LocationMarkerEntity { - @Id - private String id; - private String name; + @Id + private String id; + private String name; - @GeoPointField - private String locationAsString; + @GeoPointField + private String locationAsString; - @GeoPointField - private double[] locationAsArray; + @GeoPointField + private double[] locationAsArray; - @GeoPointField(geoHashPrefix = true, geoHashPrecision = "100km") - private String locationWithPrefixAsDistance; - - @GeoPointField(geoHashPrefix = true, geoHashPrecision = "5") - private String locationWithPrefixAsLengthOfGeoHash; + @GeoPointField + private String locationAsGeoHash; } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java index 3b7c62e2b..3f457b782 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java @@ -49,6 +49,7 @@ public class CriteriaQueryTests { public void before() { elasticsearchTemplate.deleteIndex(SampleEntity.class); elasticsearchTemplate.createIndex(SampleEntity.class); + elasticsearchTemplate.putMapping(SampleEntity.class); elasticsearchTemplate.refresh(SampleEntity.class); } @@ -715,7 +716,7 @@ public class CriteriaQueryTests { // when CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("a").or(new Criteria("message").contains("b"))); - criteriaQuery.setMinScore(0.5F); + criteriaQuery.setMinScore(2.0F); Page page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class); // then assertThat(page.getTotalElements(), is(1L)); diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/AbstractInheritedEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/AbstractInheritedEntity.java index 630c2d700..a11d33a8e 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/AbstractInheritedEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/AbstractInheritedEntity.java @@ -19,7 +19,6 @@ import java.util.Date; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Field; -import org.springframework.data.elasticsearch.annotations.FieldIndex; import org.springframework.data.elasticsearch.annotations.FieldType; /** @@ -30,7 +29,7 @@ public class AbstractInheritedEntity { @Id private String id; - @Field(type = FieldType.Date, index = FieldIndex.not_analyzed) + @Field(type = FieldType.Date, index = false) private Date createdDate; public String getId() { diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/Book.java b/src/test/java/org/springframework/data/elasticsearch/entities/Book.java index f232b2992..8a6d15840 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/Book.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/Book.java @@ -39,7 +39,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; @NoArgsConstructor @AllArgsConstructor @Builder -@Document(indexName = "book", type = "book", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-book", type = "book", shards = 1, replicas = 0, refreshInterval = "-1") public class Book { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/DoubleIDEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/DoubleIDEntity.java index a75a8a50f..09b477ace 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/DoubleIDEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/DoubleIDEntity.java @@ -18,13 +18,15 @@ package org.springframework.data.elasticsearch.entities; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; import org.springframework.data.elasticsearch.annotations.Document; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; /** * @author Rizwan Idrees * @author Mohsin Husen */ -@Document(indexName = "double-keyed-entity", type = "double-keyed-entity", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-double-keyed-entity", type = "double-keyed-entity", shards = 1, replicas = 0, refreshInterval = "-1") public class DoubleIDEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/DynamicSettingAndMappingEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/DynamicSettingAndMappingEntity.java index ee59e5412..6778eb543 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/DynamicSettingAndMappingEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/DynamicSettingAndMappingEntity.java @@ -25,7 +25,7 @@ import org.springframework.data.elasticsearch.annotations.Setting; * * @author Mohsin Husen */ -@Document(indexName = "test-setting-index", type = "test-setting-type") +@Document(indexName = "test-index-dynamic-setting-and-mapping", type = "test-setting-type") @Setting(settingPath = "/settings/test-settings.json") @Mapping(mappingPath = "/mappings/test-mappings.json") public class DynamicSettingAndMappingEntity { diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/FieldDynamicMappingEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/FieldDynamicMappingEntity.java index 0fade78c4..53400b420 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/FieldDynamicMappingEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/FieldDynamicMappingEntity.java @@ -24,7 +24,7 @@ import org.springframework.data.elasticsearch.annotations.Mapping; * * @author Ted Liang */ -@Document(indexName = "test-field-mapping-index", type = "test-field-mapping-type") +@Document(indexName = "test-index-field-dynamic-mapping", type = "test-field-mapping-type") public class FieldDynamicMappingEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/GeoEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/GeoEntity.java index 7d6939c00..cff20a934 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/GeoEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/GeoEntity.java @@ -23,7 +23,7 @@ import org.springframework.data.geo.Polygon; @NoArgsConstructor @AllArgsConstructor @Builder -@Document(indexName = "geo-test-index", type = "geo-test-index", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-geo", type = "geo-test-index", shards = 1, replicas = 0, refreshInterval = "-1") public class GeoEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/Group.java b/src/test/java/org/springframework/data/elasticsearch/entities/Group.java index 6c0cab283..148048e8a 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/Group.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/Group.java @@ -26,7 +26,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; /** * Created by akonczak on 21/08/2016. */ -@Document(indexName = "groups", type = "group") +@Document(indexName = "test-index-group", type = "group") public class Group { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/IntegerIDEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/IntegerIDEntity.java index 49c43958c..4dabee8f1 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/IntegerIDEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/IntegerIDEntity.java @@ -18,13 +18,15 @@ package org.springframework.data.elasticsearch.entities; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; import org.springframework.data.elasticsearch.annotations.Document; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; /** * @author Rizwan Idrees * @author Mohsin Husen */ -@Document(indexName = "integer-keyed-entity", type = "integer-keyed-entity", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-integer-keyed-entity", type = "integer-keyed-entity", shards = 1, replicas = 0, refreshInterval = "-1") public class IntegerIDEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/MinimalEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/MinimalEntity.java index a3f1ede5c..ab4884d14 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/MinimalEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/MinimalEntity.java @@ -23,7 +23,7 @@ import org.springframework.data.elasticsearch.annotations.Document; * * @author Philipp Jardas */ -@Document(indexName = "index", type = "type") +@Document(indexName = "test-index-minimal", type = "type") public class MinimalEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/ParentEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/ParentEntity.java index e0e6aaf45..545704e3c 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/ParentEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/ParentEntity.java @@ -38,7 +38,7 @@ public class ParentEntity { @Id private String id; - @Field(type = FieldType.String, index = FieldIndex.analyzed, store = true) + @Field(type = FieldType.text, store = true) private String name; public ParentEntity() { @@ -67,10 +67,10 @@ public class ParentEntity { @Id private String id; - @Field(type = FieldType.String, store = true) + @Field(type = FieldType.text, store = true) @Parent(type = PARENT_TYPE) private String parentId; - @Field(type = FieldType.String, index = FieldIndex.analyzed, store = true) + @Field(type = FieldType.text, store = true) private String name; public ChildEntity() { diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/Person.java b/src/test/java/org/springframework/data/elasticsearch/entities/Person.java index a2b4fb580..6bfa325dd 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/Person.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/Person.java @@ -29,7 +29,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; * @author Artur Konczak */ -@Document(indexName = "person", type = "user", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-person", type = "user", shards = 1, replicas = 0, refreshInterval = "-1") public class Person { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/PersonMultipleLevelNested.java b/src/test/java/org/springframework/data/elasticsearch/entities/PersonMultipleLevelNested.java index a8fbbc16d..5ae80043c 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/PersonMultipleLevelNested.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/PersonMultipleLevelNested.java @@ -29,7 +29,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; * @author Artur Konczak */ -@Document(indexName = "person-multiple-level-nested", type = "user", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-person-multiple-level-nested", type = "user", shards = 1, replicas = 0, refreshInterval = "-1") public class PersonMultipleLevelNested { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/Product.java b/src/test/java/org/springframework/data/elasticsearch/entities/Product.java index 06ae727a6..26b567490 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/Product.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/Product.java @@ -38,7 +38,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; @NoArgsConstructor @AllArgsConstructor @Builder -@Document(indexName = "test-product-index", type = "test-product-type", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-product", type = "test-product-type", shards = 1, replicas = 0, refreshInterval = "-1") public class Product { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SampleDateMappingEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/SampleDateMappingEntity.java index 593a43de3..66f0e30d0 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SampleDateMappingEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SampleDateMappingEntity.java @@ -1,7 +1,7 @@ package org.springframework.data.elasticsearch.entities; -import static org.springframework.data.elasticsearch.annotations.FieldIndex.*; import static org.springframework.data.elasticsearch.annotations.FieldType.*; +import static org.springframework.data.elasticsearch.annotations.FieldType.text; import java.util.Date; @@ -13,13 +13,13 @@ import org.springframework.data.elasticsearch.annotations.Field; /** * @author Jakub Vavrik */ -@Document(indexName = "test-datemapping", type = "mapping", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-date-mapping", type = "mapping", shards = 1, replicas = 0, refreshInterval = "-1") public class SampleDateMappingEntity { @Id private String id; - @Field(type = String, index = not_analyzed, store = true, analyzer = "standard") + @Field(type = text, index = false, store = true, analyzer = "standard") private String message; @Field(type = Date, format = DateFormat.custom, pattern = "dd.MM.yyyy hh:mm") diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SampleEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/SampleEntity.java index 7c14810be..4fc2a1975 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SampleEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SampleEntity.java @@ -15,19 +15,21 @@ */ package org.springframework.data.elasticsearch.entities; +import java.lang.Double; +import java.lang.Long; +import java.lang.Object; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; - import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; -import org.springframework.data.elasticsearch.annotations.FieldType; import org.springframework.data.elasticsearch.annotations.ScriptedField; import org.springframework.data.elasticsearch.core.geo.GeoPoint; +import static org.springframework.data.elasticsearch.annotations.FieldType.*; /** * @author Rizwan Idrees @@ -39,17 +41,18 @@ import org.springframework.data.elasticsearch.core.geo.GeoPoint; @NoArgsConstructor @AllArgsConstructor @Builder -@Document(indexName = "test-index", type = "test-type", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-sample", type = "test-type", shards = 1, replicas = 0, refreshInterval = "-1") public class SampleEntity { @Id private String id; + @Field(type = text, store = true, fielddata = true) private String type; - @Field(type = FieldType.String) + @Field(type = text, store = true, fielddata = true) private String message; private int rate; @ScriptedField - private Long scriptedRate; + private Double scriptedRate; private boolean available; private String highlightedMessage; diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SampleEntityUUIDKeyed.java b/src/test/java/org/springframework/data/elasticsearch/entities/SampleEntityUUIDKeyed.java index 2ad1be028..21d38fcfc 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SampleEntityUUIDKeyed.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SampleEntityUUIDKeyed.java @@ -26,6 +26,8 @@ import java.util.UUID; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; import org.springframework.data.elasticsearch.annotations.Document; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; import org.springframework.data.elasticsearch.annotations.ScriptedField; import org.springframework.data.elasticsearch.core.geo.GeoPoint; @@ -46,6 +48,7 @@ public class SampleEntityUUIDKeyed { @Id private UUID id; private String type; + @Field(type = FieldType.text, fielddata = true) private String message; private int rate; @ScriptedField diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SampleInheritedEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/SampleInheritedEntity.java index 6d912f4de..0714e73a9 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SampleInheritedEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SampleInheritedEntity.java @@ -15,8 +15,7 @@ */ package org.springframework.data.elasticsearch.entities; -import static org.springframework.data.elasticsearch.annotations.FieldIndex.*; -import static org.springframework.data.elasticsearch.annotations.FieldType.*; +import static org.springframework.data.elasticsearch.annotations.FieldType.text; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; @@ -24,10 +23,10 @@ import org.springframework.data.elasticsearch.annotations.Field; /** * @author Kevin Leturc */ -@Document(indexName = "test-inherited-mapping", type = "mapping", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-sample-inherited", type = "mapping", shards = 1, replicas = 0, refreshInterval = "-1") public class SampleInheritedEntity extends AbstractInheritedEntity { - @Field(type = String, index = not_analyzed, store = true, analyzer = "standard") + @Field(type = text, index = false, store = true, analyzer = "standard") private String message; public String getMessage() { diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SampleMappingEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/SampleMappingEntity.java index 4a62aea78..eea050476 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SampleMappingEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SampleMappingEntity.java @@ -15,8 +15,7 @@ */ package org.springframework.data.elasticsearch.entities; -import static org.springframework.data.elasticsearch.annotations.FieldIndex.*; -import static org.springframework.data.elasticsearch.annotations.FieldType.*; +import static org.springframework.data.elasticsearch.annotations.FieldType.text; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; @@ -26,13 +25,13 @@ import org.springframework.data.elasticsearch.annotations.Field; * @author Rizwan Idrees * @author Mohsin Husen */ -@Document(indexName = "test-mapping", type = "mapping", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-sample-mapping", type = "mapping", shards = 1, replicas = 0, refreshInterval = "-1") public class SampleMappingEntity { @Id private String id; - @Field(type = String, index = not_analyzed, store = true, analyzer = "standard") + @Field(type = text, index = false, store = true, analyzer = "standard") private String message; private NestedEntity nested; @@ -55,7 +54,7 @@ public class SampleMappingEntity { static class NestedEntity { - @Field(type = String) + @Field(type = text) private String someField; public String getSomeField() { diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SampleTransientEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/SampleTransientEntity.java index 8fd07ecf8..b211aa566 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SampleTransientEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SampleTransientEntity.java @@ -15,8 +15,7 @@ */ package org.springframework.data.elasticsearch.entities; -import static org.springframework.data.elasticsearch.annotations.FieldIndex.*; -import static org.springframework.data.elasticsearch.annotations.FieldType.*; +import static org.springframework.data.elasticsearch.annotations.FieldType.text; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; @@ -26,13 +25,13 @@ import org.springframework.data.elasticsearch.annotations.Field; /** * @author Jakub Vavrik */ -@Document(indexName = "test-recursive-mapping", type = "mapping", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-recursive-mapping", type = "mapping", shards = 1, replicas = 0, refreshInterval = "-1") public class SampleTransientEntity { @Id private String id; - @Field(type = String, index = not_analyzed, store = true, analyzer = "standard") + @Field(type = text, index = false, store = true, analyzer = "standard") private String message; @Transient diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SimpleRecursiveEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/SimpleRecursiveEntity.java index 69cb1c0ad..e0f9d314e 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SimpleRecursiveEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SimpleRecursiveEntity.java @@ -24,7 +24,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; * @author Stuart Stevenson * @author Mohsin Husen */ -@Document(indexName = "circular-objects", type = "circular-object", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-simple-recursive", type = "circular-object", shards = 1, replicas = 0, refreshInterval = "-1") public class SimpleRecursiveEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SpELEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/SpELEntity.java index b4143d1dd..b423727ad 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SpELEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SpELEntity.java @@ -23,7 +23,7 @@ import org.springframework.data.elasticsearch.annotations.Document; * * @author Artur Konczak */ -@Document(indexName = "#{'abz'+'-'+'entity'}", type = "#{'my'+'Type'}", shards = 1, +@Document(indexName = "#{'test-index-abz'+'-'+'entity'}", type = "#{'my'+'Type'}", shards = 1, replicas = 0, refreshInterval = "-1") public class SpELEntity { diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/StockPrice.java b/src/test/java/org/springframework/data/elasticsearch/entities/StockPrice.java index 0638f010e..b1ce59267 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/StockPrice.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/StockPrice.java @@ -37,7 +37,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; @NoArgsConstructor @AllArgsConstructor @Builder -@Document(indexName = "stock", type = "price", shards = 1, replicas = 0, refreshInterval = "-1") +@Document(indexName = "test-index-stock", type = "price", shards = 1, replicas = 0, refreshInterval = "-1") public class StockPrice { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/SynonymEntity.java b/src/test/java/org/springframework/data/elasticsearch/entities/SynonymEntity.java index ddb61b99f..684d29c51 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/SynonymEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/SynonymEntity.java @@ -25,7 +25,7 @@ import org.springframework.data.elasticsearch.annotations.Setting; * * @author Mohsin Husen */ -@Document(indexName = "synonym-index", type = "synonym-type") +@Document(indexName = "test-index-synonym", type = "synonym-type") @Setting(settingPath = "/synonyms/settings.json") @Mapping(mappingPath = "/synonyms/mappings.json") public class SynonymEntity { diff --git a/src/test/java/org/springframework/data/elasticsearch/entities/User.java b/src/test/java/org/springframework/data/elasticsearch/entities/User.java index 7de214abe..9d3ba3868 100644 --- a/src/test/java/org/springframework/data/elasticsearch/entities/User.java +++ b/src/test/java/org/springframework/data/elasticsearch/entities/User.java @@ -26,7 +26,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; /** * Created by akonczak on 21/08/2016. */ -@Document(indexName = "users", type = "user") +@Document(indexName = "test-index-user", type = "user") public class User { @Id private String id; diff --git a/src/test/java/org/springframework/data/elasticsearch/immutable/ImmutableEntity.java b/src/test/java/org/springframework/data/elasticsearch/immutable/ImmutableEntity.java index b03a5fd21..f066c3ecf 100644 --- a/src/test/java/org/springframework/data/elasticsearch/immutable/ImmutableEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/immutable/ImmutableEntity.java @@ -24,7 +24,7 @@ import org.springframework.data.elasticsearch.annotations.Document; * @author Young Gu * @author Oliver Gierke */ -@Document(indexName = "test-index") +@Document(indexName = "test-index-immutable") @NoArgsConstructor(force = true) @Getter public class ImmutableEntity { diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/CdiRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/CdiRepositoryTests.java index a76fa9766..cab908910 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/CdiRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/CdiRepositoryTests.java @@ -58,6 +58,7 @@ public class CdiRepositoryTests { CdiRepositoryClient client = cdiContainer.getInstance(CdiRepositoryClient.class); repository = client.getRepository(); personRepository = client.getSamplePersonRepository(); + repository.deleteAll(); qualifiedProductRepository = client.getQualifiedProductRepository(); } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/ElasticsearchTemplateProducer.java b/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/ElasticsearchTemplateProducer.java index 69536c004..ce36a6465 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/ElasticsearchTemplateProducer.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/ElasticsearchTemplateProducer.java @@ -19,7 +19,8 @@ import javax.annotation.PreDestroy; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; -import org.elasticsearch.client.node.NodeClient; +import org.elasticsearch.client.Client; +import org.elasticsearch.node.NodeValidationException; import org.springframework.data.elasticsearch.Utils; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; @@ -31,20 +32,20 @@ import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; class ElasticsearchTemplateProducer { @Produces - public NodeClient createNodeClient() { + public Client createNodeClient() throws NodeValidationException { return Utils.getNodeClient(); } @Produces - public ElasticsearchOperations createElasticsearchTemplate(NodeClient nodeClient) { - return new ElasticsearchTemplate(nodeClient); + public ElasticsearchOperations createElasticsearchTemplate(Client client) { + return new ElasticsearchTemplate(client); } @Produces @OtherQualifier @PersonDB - public ElasticsearchOperations createQualifiedElasticsearchTemplate(NodeClient nodeClient) { - return new ElasticsearchTemplate(nodeClient); + public ElasticsearchOperations createQualifiedElasticsearchTemplate(Client client) { + return new ElasticsearchTemplate(client); } @PreDestroy diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseEntity.java b/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseEntity.java index 92a38791c..e31a58049 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseEntity.java @@ -9,7 +9,7 @@ import org.springframework.data.elasticsearch.annotations.Document; * @author Mason Chan */ -@Document(indexName = "test-index", type = "test-type", createIndex = false) +@Document(indexName = "test-index-not-create", type = "test-type", createIndex = false) public class CreateIndexFalseEntity { @Id private String id; 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 e02331b97..880343f51 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 @@ -120,7 +120,7 @@ public class DynamicSettingAndMappingEntityRepositoryTests { Map properties = (Map) mapping.get("properties"); assertThat(mapping, is(notNullValue())); assertThat(properties, is(notNullValue())); - assertThat(((String) ((Map) properties.get("email")).get("type")), is("string")); + assertThat(((String) ((Map) properties.get("email")).get("type")), is("text")); assertThat((String) ((Map) properties.get("email")).get("analyzer"), is("emailAnalyzer")); } @@ -145,7 +145,7 @@ public class DynamicSettingAndMappingEntityRepositoryTests { Map properties = (Map) mapping.get("properties"); assertThat(mapping, is(notNullValue())); assertThat(properties, is(notNullValue())); - assertThat(((String) ((Map) properties.get("email")).get("type")), is("string")); + assertThat(((String) ((Map) properties.get("email")).get("type")), is("text")); assertThat((String) ((Map) properties.get("email")).get("analyzer"), is("emailAnalyzer")); } @@ -161,7 +161,7 @@ public class DynamicSettingAndMappingEntityRepositoryTests { Map properties = (Map) mapping.get("properties"); assertThat(mapping, is(notNullValue())); assertThat(properties, is(notNullValue())); - assertThat(((String) ((Map) properties.get("email")).get("type")), is("string")); + assertThat(((String) ((Map) properties.get("email")).get("type")), is("text")); assertThat((String) ((Map) properties.get("email")).get("analyzer"), is("emailAnalyzer")); } } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/FieldDynamicMappingEntityRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/FieldDynamicMappingEntityRepositoryTests.java index 4d0c35620..36b8162ec 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/FieldDynamicMappingEntityRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/FieldDynamicMappingEntityRepositoryTests.java @@ -69,7 +69,7 @@ public class FieldDynamicMappingEntityRepositoryTests { assertThat(properties.containsKey("file"), is(true)); Map file = (Map) properties.get("file"); assertThat(file, is(notNullValue())); - assertThat(((String) file.get("type")), is("string")); + assertThat(((String) file.get("type")), is("text")); assertThat(file.containsKey("fields"), is(true)); Map fields = (Map) file.get("fields"); @@ -79,7 +79,7 @@ public class FieldDynamicMappingEntityRepositoryTests { Map content = (Map) fields.get("content"); assertThat(content, is(notNullValue())); - assertThat((String)content.get("type"), is("string")); + assertThat((String)content.get("type"), is("text")); assertThat((String)content.get("term_vector"), is("with_positions_offsets")); assertThat((Boolean)content.get("store"), is(Boolean.TRUE)); } diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/complex/ComplexCustomMethodRepositoryManualWiringTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/complex/ComplexCustomMethodRepositoryManualWiringTests.java index 433446bed..30d8d48ec 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/complex/ComplexCustomMethodRepositoryManualWiringTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/complex/ComplexCustomMethodRepositoryManualWiringTests.java @@ -44,6 +44,7 @@ public class ComplexCustomMethodRepositoryManualWiringTests { public void before() { elasticsearchTemplate.deleteIndex(SampleEntity.class); elasticsearchTemplate.createIndex(SampleEntity.class); + elasticsearchTemplate.putMapping(SampleEntity.class); elasticsearchTemplate.refresh(SampleEntity.class); } diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/DoubleIDRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/DoubleIDRepositoryTests.java index f0978454c..ee18d4ac1 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/support/DoubleIDRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/DoubleIDRepositoryTests.java @@ -50,6 +50,7 @@ public class DoubleIDRepositoryTests { public void before() { elasticsearchTemplate.deleteIndex(DoubleIDEntity.class); elasticsearchTemplate.createIndex(DoubleIDEntity.class); + elasticsearchTemplate.putMapping(DoubleIDEntity.class); elasticsearchTemplate.refresh(DoubleIDEntity.class); } diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/IntegerIDRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/IntegerIDRepositoryTests.java index b1cb6ca25..8b59b4899 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/support/IntegerIDRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/IntegerIDRepositoryTests.java @@ -50,6 +50,7 @@ public class IntegerIDRepositoryTests { public void before() { elasticsearchTemplate.deleteIndex(IntegerIDEntity.class); elasticsearchTemplate.createIndex(IntegerIDEntity.class); + elasticsearchTemplate.putMapping(IntegerIDEntity.class); elasticsearchTemplate.refresh(IntegerIDEntity.class); } diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepositoryTests.java index 137b5b7a1..08a19c500 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepositoryTests.java @@ -15,16 +15,12 @@ */ package org.springframework.data.elasticsearch.repository.support; -import static org.apache.commons.lang.RandomStringUtils.*; -import static org.elasticsearch.index.query.QueryBuilders.*; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; - +import org.elasticsearch.action.ActionRequestValidationException; +import org.elasticsearch.common.util.CollectionUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.data.domain.Sort.Order; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.SearchQuery; @@ -39,8 +36,11 @@ import org.springframework.data.elasticsearch.entities.SampleEntity; import org.springframework.data.elasticsearch.repositories.sample.SampleElasticsearchRepository; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import com.google.common.collect.Lists; +import static org.apache.commons.lang.RandomStringUtils.*; +import static org.elasticsearch.index.query.QueryBuilders.*; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; +import static org.springframework.data.domain.Sort.Direction.*; /** * @author Rizwan Idrees @@ -60,6 +60,7 @@ public class SimpleElasticsearchRepositoryTests { public void before() { elasticsearchTemplate.deleteIndex(SampleEntity.class); elasticsearchTemplate.createIndex(SampleEntity.class); + elasticsearchTemplate.putMapping(SampleEntity.class); elasticsearchTemplate.refresh(SampleEntity.class); } @@ -103,8 +104,8 @@ public class SimpleElasticsearchRepositoryTests { assertThat(entityFromElasticSearch.isPresent(), is(true)); } - @Test - public void shouldSaveDocumentWithoutId() { + @Test(expected = ActionRequestValidationException.class) + public void throwExceptionWhenTryingToInsertWithVersionButWithoutId() { // given SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setMessage("some message"); @@ -229,7 +230,7 @@ public class SimpleElasticsearchRepositoryTests { // then assertNotNull("sample entities cant be null..", sampleEntities); - List entities = Lists.newArrayList(sampleEntities); + List entities = CollectionUtils.iterableAsArrayList(sampleEntities); assertThat(entities.size(), is(2)); } @@ -508,7 +509,7 @@ public class SimpleElasticsearchRepositoryTests { sampleEntity2.setMessage("hello"); repository.save(sampleEntity2); // when - Iterable sampleEntities = repository.findAll(new Sort(new Sort.Order(Sort.Direction.ASC, "message"))); + Iterable sampleEntities = repository.findAll(new Sort(new Order(ASC, "message"))); // then assertThat(sampleEntities, is(notNullValue())); } diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/UUIDElasticsearchRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/UUIDElasticsearchRepositoryTests.java index 8582edca3..02fc6e95e 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/support/UUIDElasticsearchRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/UUIDElasticsearchRepositoryTests.java @@ -15,17 +15,12 @@ */ package org.springframework.data.elasticsearch.repository.support; -import static org.elasticsearch.index.query.QueryBuilders.*; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; - import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Optional; import java.util.UUID; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -40,6 +35,9 @@ import org.springframework.data.elasticsearch.entities.SampleEntityUUIDKeyed; import org.springframework.data.elasticsearch.repositories.sample.SampleUUIDKeyedElasticsearchRepository; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import static org.elasticsearch.index.query.QueryBuilders.*; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; /** * @author Gad Akuka @@ -243,7 +241,7 @@ public class UUIDElasticsearchRepositoryTests { // when repository.saveAll(sampleEntities); // then - Page entities = repository.search(termQuery("id", documentId), new PageRequest(0, 50)); + Page entities = repository.search(termQuery("id", documentId.toString()), new PageRequest(0, 50)); assertNotNull(entities); } @@ -286,7 +284,7 @@ public class UUIDElasticsearchRepositoryTests { // when long result = repository.deleteSampleEntityUUIDKeyedById(documentId); // then - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build(); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId.toString())).build(); Page sampleEntities = repository.search(searchQuery); assertThat(sampleEntities.getTotalElements(), equalTo(0L)); assertThat(result, equalTo(1L)); @@ -400,7 +398,7 @@ public class UUIDElasticsearchRepositoryTests { repository.delete(sampleEntityUUIDKeyed); repository.refresh(); // then - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build(); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId.toString())).build(); Page sampleEntities = repository.search(searchQuery); assertThat(sampleEntities.getTotalElements(), equalTo(0L)); } @@ -423,7 +421,7 @@ public class UUIDElasticsearchRepositoryTests { repository.save(sampleEntityUUIDKeyed2); // when - Iterable sampleEntities = repository.search(termQuery("id", documentId1)); + Iterable sampleEntities = repository.search(termQuery("id", documentId1.toString())); // then assertNotNull("sample entities cant be null..", sampleEntities); } @@ -454,7 +452,6 @@ public class UUIDElasticsearchRepositoryTests { @Test public void shouldSortByGivenField() { - // todo // given UUID documentId = UUID.randomUUID(); SampleEntityUUIDKeyed sampleEntityUUIDKeyed = new SampleEntityUUIDKeyed(); diff --git a/src/test/resources/mappings/test-field-mappings.json b/src/test/resources/mappings/test-field-mappings.json index 57fb17263..6a97cd3f2 100644 --- a/src/test/resources/mappings/test-field-mappings.json +++ b/src/test/resources/mappings/test-field-mappings.json @@ -1,8 +1,8 @@ { - "type": "string", + "type": "text", "fields": { "content": { - "type": "string", + "type": "text", "term_vector":"with_positions_offsets", "store": true } diff --git a/src/test/resources/node-client-configuration.yml b/src/test/resources/node-client-configuration.yml index 74683bf96..4d42008f7 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.indexed: true \ No newline at end of file +#node.max_local_storage_nodes: 100 \ No newline at end of file diff --git a/src/test/resources/repository-test-nested-object-books.xml b/src/test/resources/repository-test-nested-object-books.xml new file mode 100644 index 000000000..c0e3ac0bd --- /dev/null +++ b/src/test/resources/repository-test-nested-object-books.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/synonyms/mappings.json b/src/test/resources/synonyms/mappings.json index 815892a6a..875c23c1b 100644 --- a/src/test/resources/synonyms/mappings.json +++ b/src/test/resources/synonyms/mappings.json @@ -5,7 +5,7 @@ }, "properties": { "text": { - "type": "string", + "type": "text", "analyzer": "synonym_analyzer" } } diff --git a/src/test/resources/test-home-dir/modules/lang-expression/antlr4-runtime-4.5.1-1.jar b/src/test/resources/test-home-dir/modules/lang-expression/antlr4-runtime-4.5.1-1.jar new file mode 100644 index 0000000000000000000000000000000000000000..387129d648f1fe3b9c6cbc4e6eb459eb1e5a20ca GIT binary patch literal 302034 zcmbTd1C(TKvNl@PW!rX_Z5vs(Z5v(cvTb(Rwv8^^wr$^@`R1JU&)jvsd+wiW=g!Q% zB68;&e%^?b2Y`S=1O4OCV}L6D&o}=%LH&7^5mgqXm6R2um;V%~)6I@2Yd8S;Gq|FRPk>Y_YW9Kr8Vf!Xl8Ath&?$BH zF-Q%3Z+dqX2K88@YT7gp_?&xm0;C~gI-02QgbS!{eZ{VpJ%LC#SngsNJMN_`_h?`= zYLX>)q*P)sSM+J}Q}wej@$IPLd4FBm&b3Pz6$N6Nt%tD8#YmysJW;g8coM-a?mYWF zdM_WKl0<&|AdVbCFFT2$kOe>VCyjbp3ez?YJh0e)TN7_Rg$P0< z3DN8T6pAeaz}J%HOty@UGLte?#t`(UsWz~OG1S{O($e?#Q2%ez?8hL9>}Lrkb2-0Ku+8A{5Wsoo)B#u?syogiI;Ycd7waq0%&z45Yw#G2!NuOhN#u6pU&d?o z+@m_08&fO*B2h{kOcTv@iMg898vTA-%?!irR~yJ%patlh&PoCEJ{EG4A9F^qo&6vu zSxtmfX?+0rRq>?RxMJat!5cG{LF@fiTOLc>jOogw_SEbnt$6^sBOpRKCsSeFPJ&U^l}6tw4C29{=aQcmknnG| z*$f13@9_tO6?Gs>MokBK>*2s2P<#;t1H6r2kv8APS)}&}{>zep{%J}7r@?{#`C#X0 z_TRSl|EBndq5gxyz}DH?@o(th{*BI+L0&183X+8#ZH8 zgTG#*|Nhl~MU&=Q z(0&=aT9qk;YEu5T9Y)u^LjI0fuoEqaNWWO<@2H7DA3WBMn zKLb(0WMH}(Nr(jn8v6$m(XA)d&d2AHWodomNrxfm31M;tM;Gh;h1hOkcXcwclyLX@ z`2G#(s75bP3aJcqbVQjbgC%k%_$Mz^15zSoBpjZeyb;-JDo?kI2Xg4Cqle}Eyiq8p62 zL{gJM`M3%EU%vU5UJ9zGl5zg%MeW3(lDg?IM;VH=+kC2H#HvlT1~iNVZ*?!=p^jt*i`>FL!Sc z`*3f9cE0q$I{VRNd-ru_WH6~U5&snpLM59$GkDv?0-B3O+FUx^bgZ!;S;L9I$8d>S zZYH^kwLr@!vi-2AC|U1wq<63^`xo}+W!x6$g1yLQ(4*?d*;aU{33WHoNZ78j@wY=i zH8*eZ5-7RI<*vG&z1zfmZ3JQFq}Zvwfm(Pjwfs#&w_w%819KlHRc28Rs*0O8uG}~< zf02{#EnNgo$9zQ(SFY5cLQpH$ynWa_J(VWPnU~xPPG@aOZ1Nwu^S2vrCMXX)osBux z?Xa0k_D)dTzy4jyW!gNmh<_yf_Q(3E{?_`%EUZob2-(EI=3gR?U$dPPKn(tpQRHT{ z#ojGCSV#XMktr`61R9zkFIp&}5Nlovs%>M0g8m}UDLZK7C-Qwa51~hx$aHDw0I^^* z@@pmQqdP6G`|H{Dn?6jmA5#@($+l(CJZl;qmikb*boH3M@Nii)Yw)esj;A-iJM6=z zr_TW1uMlA~_ApTnubv!U)LaRCW|s6X-R4IuskJyj%+U|x``5kgo`|Pszv}Zm;HM`K z8sludpxe6Nbt^J zag^FpH`P{PAmRX6f*+ynu=T?9D^Wu?gc)vKE9q>taf`p%N)D@&*$zNZ$g!EMQyJ_h z2Z*t`(#bVzWEy4|9Z)i0%gwOj4KBV+Hm>b6-^=Qi>xmuPrtT^kP%|7?3rq3+FyS&& z!mce2Oqd+za?{PUb~9`=v&K*+gXC&#U6Hy4{mVXM;3Gt-s32W z-es}GZC{oRHrThb_wyG)7tFS62ht$;{%MW@U%2f4U{Oz4F1O!DnSuxjh{0uF@SX==9-Wa5vob zF1Mq}+}eP>lMi9�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�q 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

%5rB!W?-gvj`= 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 F{67(LwlDwy literal 0 HcmV?d00001 diff --git a/src/test/resources/test-home-dir/modules/lang-expression/asm-5.0.4.jar b/src/test/resources/test-home-dir/modules/lang-expression/asm-5.0.4.jar new file mode 100644 index 0000000000000000000000000000000000000000..cdb283dd7f6d7d420ba0fca8ec23e1f38fc3b7c1 GIT binary patch literal 53297 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 literal 0 HcmV?d00001 diff --git a/src/test/resources/test-home-dir/modules/lang-expression/asm-commons-5.0.4.jar b/src/test/resources/test-home-dir/modules/lang-expression/asm-commons-5.0.4.jar new file mode 100644 index 0000000000000000000000000000000000000000..e89265f1e6c315689b63f11eed9397bb2e7ab9ff GIT binary patch literal 41796 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 Ilpo*z54W;yKmY&$ literal 0 HcmV?d00001 diff --git a/src/test/resources/test-home-dir/modules/lang-expression/asm-tree-5.0.4.jar b/src/test/resources/test-home-dir/modules/lang-expression/asm-tree-5.0.4.jar new file mode 100644 index 0000000000000000000000000000000000000000..ac68a32ec1957f2ae489cf2ae6392fd8e7b163a0 GIT binary patch literal 29050 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 z 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 z zWOgK56uV6CS#4=A;bf>fkx}mlW|gv@+BnDHUqaP2UmI0}F@#Oa0(*F!4XCN>bGZG@ zp1*_Hl?TS<{i%}~7w=QC%MCkq-3f4%VUWq*$OBM6CGNb9?r+}9R#4QCSvuM~Q9#fZ z8KR;LV3A>JXay0H8@o3CMic;Ke;aqXTQ_QI4m8RayYO1#H;h-%ZE9CBET)Ev(Y>OL z+)=6$s!-L7_;W?nZ&kiSo|}EjyK13(_YKz`xBRCHZcaG@Xv8hS^1ye9yBTETZg)s~G%F8?HRBjX z6hlWkgtS?HcWToVoD*@)jc3O=zt4#3B26UgiCf#0NoSBs*Wr5l8N7)c$nc{_7N!bm zN99cFYo;sDOg_b&=VI>Ci?(W<;(7g>5k&9}8sCZ7ld`NPUm>AVgCaZ|XS(bBcnGF( z9Q`o-;X}SHjF3~HFG2VrY&=Ch7`4c?OHx=hJkWcouIKh=q())zMFisdMLs0)y12Ms zfBVal!ZSd+#QqDZ>0d|{ z`Y)0CpEs`l3Dy5IV}40$z^HY43V)Z>1Q@KodF~{zQ1bjmQtR#wPK6-jd;0$Oc%{Bb z5-8tg=EJk>+pJ3+H^29fYvdkh8aP9QIXNC0f>?1-9sn{36;6S zF7?R2LSR5`Tq9hfxdqO5Vdqr~w2QuSyPd3lY)cYOweSx>@&R~3re7Tc%vO5%4=7*( z+TRHCxcN`{T#O2iHS*0wfAf1|72KmrqR?47Ny6Ap<%z-?D}X-9&wo~92CcrxBTfR9 z>VuJRmFnPClA;Rwef+b0K|KSe)pd^=PzQiReMZRo70C1TZi+?ZQWBk?ZH{N2q6MkL z3!_#kuP#p*RK-S&N6vT1go4#NtgK=J-Wr_3w2JgL3`SnWm}2zT|Ut+E+^@>JnbQM^^?sSUNpxY;%&i`9g8PJQgzVJpp{ z`^pqo>?Mp<=*?CL_9 zx+5~UX~{iz`=e_HV1VMR+sNdMX5~bt|H6S>T-k)5_=EKcrtRjPa+JdmW6&l@#b;0a$jMy8x&6WY@=;vu%Q_7*kft735IMY4?!ONgpY{0 z-66R3wRHAPPlx?%K2!BmGGJL*2v-v`^#}}G; z|I5euKgh%Xi_2eSMvEgO7>?v5g#U}ne}o7ejbyNtv}V~vN1*?KWv0Jl*=>~^Z#E50 zig|9QiuqmkYr?Mn8<*Yi8XujzE;HXJSN{)|2QX#G8H2Q`?0yOKXQ{F5R7b3+vFv?e znFJ|SewPm~jO+``NBCtU$EVVLHWGWeRzv38uM525-gx!qJ0hUTk@s*J!XT;=W7=blP|%r;0~L=+{%+Ww6## z6`LpdX4$9k>Xm6!7i=9~tgEg3XtG%b(s%kkwLj2u*|MenM|g`JD^_4%0A!}V*Ed{f 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%0ADgBe zWPRW?i9=yb-W?JK*#ki+}a&^&Vvao=acld;ER1Nh2`QKRvPjxwZv#nB#oo- z%Mh$2Fa(l20c2<`w&Ee2;Ks@5lXt1`Q1v3g7Oeh)pH21gia3a;nQ={7g<&R#Rz^K3 zhZXHyh43-`LvAr(i+f{|)4JU&rICS;y8!d{k(Yxt6>Lyi^1fMrW?BOOc3$7RV(Eof>_}2f+dE z(F%uLBDyf)$t-WCn%QEV*m2E&n4!9dlU=y;^OKq%JNrkKlpVcg&2d>0JsFTzE^k7`!@cGa=-k;cuGu&rX>jzCsBvS#G zs-D@|P(-_ZHkx^V&<&VLKvX4V&jEsDedtTT`4|53;O@v9jkVZc4Zvg!y|9s}~a~H43$rsbsNx}C_tG5UTQIz(Mi|E}MO z=g=wl|3&1yotWn@Rq+n0BLUR4QtCGyg`g?7??SviWzXM!mN#wc0iQxp17)pZ-sDL_ zUw++%_a~d)uHTcNAM;1jXItU;CHclJEB>?zBJSfirZ@pFqcm`!`$w z_1$s*qEC*iHufP@pM0o3e}$6$eN+UAGT#mG%e1&{nEo_SL4is;pP*+PB6N<({Y`~_ zR|LIcyBqjlBHG+n2_n+VgK0N|I^uhGZW%9PRZhKxZ4KpPqdo}@2+Wsz`N0Izn0!^%9|;vu4$Qe zcccA#f~uSIYL!3ajMr~XzJrTt&`Ump4+2VZxU}t?pzZ|g6~HB zgJu6Tls6+Ju7R{+cLQFl_-nkxO~r1y^j~wP!tchpUNvt&32u5mT@&!1-<|M}rShM! z+jh#YVcKcGJf&XmoBwK$+qSQ-1zi0q;Fry84P^xA%^nO41N6@vdS99K{;&W3ANXz| A#Q*>R literal 0 HcmV?d00001 diff --git a/src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-6.4.1.jar b/src/test/resources/test-home-dir/modules/lang-expression/lucene-expressions-6.4.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..b2b9baa9994892804ecd697bf169080b70837257 GIT binary patch literal 73459 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 RMrNQOz@5ALZ;x+){ttPulI#Eg literal 0 HcmV?d00001 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 new file mode 100644 index 000000000..d505e56dc --- /dev/null +++ b/src/test/resources/test-home-dir/modules/lang-expression/plugin-descriptor.properties @@ -0,0 +1,40 @@ +# 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=Lucene expressions integration for Elasticsearch +# +# 'version': plugin's version +version=5.2.1 +# +# 'name': the plugin name +name=lang-expression +# +# 'classname': the name of the class to load, fully-qualified. +classname=org.elasticsearch.script.expression.ExpressionPlugin +# +# '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.2.1 diff --git a/src/test/resources/test-home-dir/modules/lang-expression/plugin-security.policy b/src/test/resources/test-home-dir/modules/lang-expression/plugin-security.policy new file mode 100644 index 000000000..4835ab053 --- /dev/null +++ b/src/test/resources/test-home-dir/modules/lang-expression/plugin-security.policy @@ -0,0 +1,32 @@ +/* + * 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"; + + // expression runtime + permission org.elasticsearch.script.ClassPermission "java.lang.String"; + permission org.elasticsearch.script.ClassPermission "org.apache.lucene.expressions.Expression"; + permission org.elasticsearch.script.ClassPermission "org.apache.lucene.search.DoubleValues"; + // available functions + permission org.elasticsearch.script.ClassPermission "java.lang.Math"; + permission org.elasticsearch.script.ClassPermission "org.apache.lucene.util.MathUtil"; + permission org.elasticsearch.script.ClassPermission "org.apache.lucene.util.SloppyMath"; +}; diff --git a/src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-2.4.0.jar b/src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-2.4.0.jar deleted file mode 100644 index e5188f136eef4b53475a36b19083102e1cc76dd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16148 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 diff --git a/src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-5.2.1.jar b/src/test/resources/test-home-dir/modules/lang-groovy/lang-groovy-5.2.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..8968d5a8f97e0bb2d8b42c33294bfd7291c4c16e GIT binary patch literal 18104 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 literal 0 HcmV?d00001 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 index b1b8c715e..9d6390c19 100644 --- 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 @@ -1,30 +1,18 @@ # Elasticsearch plugin descriptor file -# This file must exist as 'plugin-descriptor.properties' at -# the root directory of all plugins. +# This file must exist as 'plugin-descriptor.properties' in a folder named `elasticsearch` +# inside all plugins. # -# A plugin can be 'site', 'jvm', or both. -# -### example site plugin for "foo": +### example plugin for "foo" # # foo.zip <-- zip file for the plugin, with this structure: -# _site/ <-- the contents that will be served -# plugin-descriptor.properties <-- example contents below: +#|____elasticsearch/ +#| |____ .jar <-- classes, resources, dependencies +#| |____ .jar <-- any number of jars +#| |____ plugin-descriptor.properties <-- example contents below: # -# site=true -# description=My cool plugin -# version=1.0 -# -### example jvm plugin for "foo" -# -# foo.zip <-- zip file for the plugin, with this structure: -# .jar <-- classes, resources, dependencies -# .jar <-- any number of jars -# plugin-descriptor.properties <-- example contents below: -# -# jvm=true # classname=foo.bar.BazPlugin # description=My cool plugin -# version=2.0.0-rc1 +# version=2.0 # elasticsearch.version=2.0 # java.version=1.7 # @@ -34,25 +22,10 @@ description=Groovy scripting integration for Elasticsearch # # 'version': plugin's version -version=2.4.0 +version=5.2.1 # # 'name': the plugin name name=lang-groovy - -### mandatory elements for site plugins: -# -# 'site': set to true to indicate contents of the _site/ -# directory in the root of the plugin should be served. -site=false -# -### mandatory elements for jvm plugins : -# -# 'jvm': true if the 'classname' class should be loaded -# from jar files in the root directory of the plugin. -# Note that only jar files in the root directory are -# added to the classpath for the plugin! If you need -# other resources, package them into a resources jar. -jvm=true # # 'classname': the name of the class to load, fully-qualified. classname=org.elasticsearch.script.groovy.GroovyPlugin @@ -61,20 +34,7 @@ classname=org.elasticsearch.script.groovy.GroovyPlugin # 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.7 +java.version=1.8 # # 'elasticsearch.version' version of elasticsearch compiled against -# You will have to release a new version of the plugin for each new -# elasticsearch release. This version is checked when the plugin -# is loaded so Elasticsearch will refuse to start in the presence of -# plugins with the incorrect elasticsearch.version. -elasticsearch.version=2.4.0 -# -### deprecated elements for jvm plugins : -# -# 'isolated': true if the plugin should have its own classloader. -# passing false is deprecated, and only intended to support plugins -# that have hard dependencies against each other. If this is -# not specified, then the plugin is isolated by default. -isolated=true -# +elasticsearch.version=5.2.1 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 index ace4b214b..f7d1eea41 100644 --- 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 @@ -23,15 +23,16 @@ grant { // 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) + // groovy runtime permission org.elasticsearch.script.ClassPermission "groovy.grape.GrabAnnotationTransformation"; - permission org.elasticsearch.script.ClassPermission "groovy.json.JsonOutput"; permission org.elasticsearch.script.ClassPermission "groovy.lang.Binding"; permission org.elasticsearch.script.ClassPermission "groovy.lang.GroovyObject"; permission org.elasticsearch.script.ClassPermission "groovy.lang.GString"; @@ -47,6 +48,8 @@ grant { 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"; diff --git a/template.mf b/template.mf index 55665f9a7..23c4eadb3 100644 --- a/template.mf +++ b/template.mf @@ -11,7 +11,7 @@ Import-Template: org.apache.commons.lang.*;version="${commonslang:[=.=.=,+1.0.0)}", com.fasterxml.jackson.*;version="${jackson:[=.=.=,+1.0.0)}";resolution:=optional, org.elasticsearch.*;version="${elasticsearch:[=.=.=,+1.0.0)}", - org.apache.lucene.*;version="5.5.0", + org.apache.lucene.*;version="6.4.1", org.joda.time.*;version="${jodatime:[=.=.=,+1.0.0)}", org.slf4j.*;version="${slf4j:[=.=.=,+1.0.0)}", org.springframework.*;version="${spring:[=.=.=.=,+1.0.0)}",