mirror of
				https://github.com/spring-projects/spring-data-elasticsearch.git
				synced 2025-10-31 06:38:44 +00:00 
			
		
		
		
	DATAES-407 - Support for HighLevelRestClient via ElasticsearchRestTemplate
Original pull request: #216
This commit is contained in:
		
							parent
							
								
									9c2f876bde
								
							
						
					
					
						commit
						2f0b9b718b
					
				
							
								
								
									
										16
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								pom.xml
									
									
									
									
									
								
							| @ -19,7 +19,7 @@ | |||||||
|     <properties> |     <properties> | ||||||
|         <commonscollections>3.2.1</commonscollections> |         <commonscollections>3.2.1</commonscollections> | ||||||
|         <commonslang>2.6</commonslang> |         <commonslang>2.6</commonslang> | ||||||
|         <elasticsearch>6.2.2</elasticsearch> |         <elasticsearch>6.3.0</elasticsearch> | ||||||
|         <log4j>2.9.1</log4j> |         <log4j>2.9.1</log4j> | ||||||
|         <springdata.commons>2.2.0.BUILD-SNAPSHOT</springdata.commons> |         <springdata.commons>2.2.0.BUILD-SNAPSHOT</springdata.commons> | ||||||
|         <java-module-name>spring.data.elasticsearch</java-module-name> |         <java-module-name>spring.data.elasticsearch</java-module-name> | ||||||
| @ -79,6 +79,18 @@ | |||||||
|             </exclusions> |             </exclusions> | ||||||
|         </dependency> |         </dependency> | ||||||
| 
 | 
 | ||||||
|  |         <dependency> | ||||||
|  | 		    <groupId>org.elasticsearch.client</groupId> | ||||||
|  | 		    <artifactId>elasticsearch-rest-high-level-client</artifactId> | ||||||
|  | 		    <version>${elasticsearch}</version> | ||||||
|  | 		    <exclusions> | ||||||
|  |                 <exclusion> | ||||||
|  |                     <groupId>commons-logging</groupId> | ||||||
|  |                     <artifactId>commons-logging</artifactId> | ||||||
|  |                 </exclusion> | ||||||
|  |             </exclusions> | ||||||
|  | 		</dependency> | ||||||
|  | 
 | ||||||
|         <dependency> |         <dependency> | ||||||
|             <groupId>org.slf4j</groupId> |             <groupId>org.slf4j</groupId> | ||||||
|             <artifactId>log4j-over-slf4j</artifactId> |             <artifactId>log4j-over-slf4j</artifactId> | ||||||
| @ -169,7 +181,7 @@ | |||||||
|             <groupId>org.projectlombok</groupId> |             <groupId>org.projectlombok</groupId> | ||||||
|             <artifactId>lombok</artifactId> |             <artifactId>lombok</artifactId> | ||||||
|             <version>${lombok}</version> |             <version>${lombok}</version> | ||||||
|             <scope>test</scope> |             <scope>provided</scope> | ||||||
|         </dependency> |         </dependency> | ||||||
| 
 | 
 | ||||||
|     </dependencies> |     </dependencies> | ||||||
|  | |||||||
| @ -0,0 +1,95 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright 2018 the original author or authors. | ||||||
|  |  * | ||||||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * | ||||||
|  |  *      http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  * | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  | package org.springframework.data.elasticsearch.client; | ||||||
|  | 
 | ||||||
|  | import static org.apache.commons.lang.StringUtils.*; | ||||||
|  | 
 | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | 
 | ||||||
|  | import java.net.URL; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | 
 | ||||||
|  | import org.apache.http.HttpHost; | ||||||
|  | import org.elasticsearch.client.RestClient; | ||||||
|  | import org.elasticsearch.client.RestHighLevelClient; | ||||||
|  | import org.springframework.beans.factory.DisposableBean; | ||||||
|  | import org.springframework.beans.factory.FactoryBean; | ||||||
|  | import org.springframework.beans.factory.InitializingBean; | ||||||
|  | import org.springframework.util.Assert; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * RestClientFactoryBean | ||||||
|  |  *  | ||||||
|  |  * @author Don Wellington | ||||||
|  |  */ | ||||||
|  | @Slf4j | ||||||
|  | public class RestClientFactoryBean implements FactoryBean<RestHighLevelClient>, InitializingBean, DisposableBean { | ||||||
|  | 
 | ||||||
|  | 	private RestHighLevelClient client; | ||||||
|  | 	private String hosts = "http://localhost:9200"; | ||||||
|  | 	static final String COMMA = ","; | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public void destroy() throws Exception { | ||||||
|  | 		try { | ||||||
|  | 			log.info("Closing elasticSearch  client"); | ||||||
|  | 			if (client != null) { | ||||||
|  | 				client.close(); | ||||||
|  | 			} | ||||||
|  | 		} catch (final Exception e) { | ||||||
|  | 			log.error("Error closing ElasticSearch client: ", e); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public void afterPropertiesSet() throws Exception { | ||||||
|  | 		buildClient(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public RestHighLevelClient getObject() throws Exception { | ||||||
|  | 		return client; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public Class<?> getObjectType() { | ||||||
|  | 		return RestHighLevelClient.class; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public boolean isSingleton() { | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	protected void buildClient() throws Exception { | ||||||
|  | 
 | ||||||
|  | 		Assert.hasText(hosts, "[Assertion Failed] At least one host must be set."); | ||||||
|  | 		ArrayList<HttpHost> httpHosts = new ArrayList<HttpHost>(); | ||||||
|  | 		for (String host : split(hosts, COMMA)) { | ||||||
|  | 			URL hostUrl = new URL(host); | ||||||
|  | 			httpHosts.add(new HttpHost(hostUrl.getHost(), hostUrl.getPort(), hostUrl.getProtocol())); | ||||||
|  | 		} | ||||||
|  | 		client = new RestHighLevelClient(RestClient.builder(httpHosts.toArray(new HttpHost[httpHosts.size()]))); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setHosts(String hosts) { | ||||||
|  | 		this.hosts = hosts; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public String getHosts() { | ||||||
|  | 		return this.hosts; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * Copyright 2013 the original author or authors. |  * Copyright 2013-2018 the original author or authors. | ||||||
|  * |  * | ||||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  * you may not use this file except in compliance with the License. |  * you may not use this file except in compliance with the License. | ||||||
| @ -25,8 +25,8 @@ import org.springframework.data.repository.config.RepositoryConfigurationExtensi | |||||||
|  * |  * | ||||||
|  * @author Rizwan Idrees |  * @author Rizwan Idrees | ||||||
|  * @author Mohsin Husen |  * @author Mohsin Husen | ||||||
|  |  * @author Don Wellington | ||||||
|  */ |  */ | ||||||
| 
 |  | ||||||
| public class ElasticsearchNamespaceHandler extends NamespaceHandlerSupport { | public class ElasticsearchNamespaceHandler extends NamespaceHandlerSupport { | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| @ -37,5 +37,6 @@ public class ElasticsearchNamespaceHandler extends NamespaceHandlerSupport { | |||||||
| 		registerBeanDefinitionParser("repositories", parser); | 		registerBeanDefinitionParser("repositories", parser); | ||||||
| 		registerBeanDefinitionParser("node-client", new NodeClientBeanDefinitionParser()); | 		registerBeanDefinitionParser("node-client", new NodeClientBeanDefinitionParser()); | ||||||
| 		registerBeanDefinitionParser("transport-client", new TransportClientBeanDefinitionParser()); | 		registerBeanDefinitionParser("transport-client", new TransportClientBeanDefinitionParser()); | ||||||
|  | 		registerBeanDefinitionParser("rest-client", new RestClientBeanDefinitionParser()); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,47 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright 2018 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.xml.AbstractBeanDefinitionParser; | ||||||
|  | import org.springframework.beans.factory.support.BeanDefinitionBuilder; | ||||||
|  | import org.springframework.beans.factory.xml.ParserContext; | ||||||
|  | import org.springframework.data.elasticsearch.client.RestClientFactoryBean; | ||||||
|  | import org.w3c.dom.Element; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @author Don Wellington | ||||||
|  |  */ | ||||||
|  | public class RestClientBeanDefinitionParser extends AbstractBeanDefinitionParser { | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { | ||||||
|  | 		BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(RestClientFactoryBean.class); | ||||||
|  | 		setConfigurations(element, builder); | ||||||
|  | 		return getSourcedBeanDefinition(builder, element, parserContext); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	private void setConfigurations(Element element, BeanDefinitionBuilder builder) { | ||||||
|  | 		builder.addPropertyValue("hosts", element.getAttribute("hosts")); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	private AbstractBeanDefinition getSourcedBeanDefinition(BeanDefinitionBuilder builder, Element source, | ||||||
|  | 			ParserContext context) { | ||||||
|  | 		AbstractBeanDefinition definition = builder.getBeanDefinition(); | ||||||
|  | 		definition.setSource(context.extractSource(source)); | ||||||
|  | 		return definition; | ||||||
|  | 	} | ||||||
|  | } | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -136,7 +136,7 @@ import org.springframework.util.StringUtils; | |||||||
|  * @author Ted Liang |  * @author Ted Liang | ||||||
|  * @author Jean-Baptiste Nizet |  * @author Jean-Baptiste Nizet | ||||||
|  */ |  */ | ||||||
| public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware { | public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<Client>, ApplicationContextAware { | ||||||
| 
 | 
 | ||||||
| 	private static final Logger QUERY_LOGGER = LoggerFactory.getLogger("org.springframework.data.elasticsearch.core.QUERY"); | 	private static final Logger QUERY_LOGGER = LoggerFactory.getLogger("org.springframework.data.elasticsearch.core.QUERY"); | ||||||
| 	private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchTemplate.class); | 	private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchTemplate.class); | ||||||
|  | |||||||
| @ -0,0 +1,26 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright 2018 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.core; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * EsClient interface. Specify what client an ElasticSearchTemplate will return from getClient(). | ||||||
|  |  *  | ||||||
|  |  * @author Don Wellington | ||||||
|  |  * @param <C> | ||||||
|  |  */ | ||||||
|  | public interface EsClient<C> { | ||||||
|  | 	C getClient(); | ||||||
|  | } | ||||||
| @ -0,0 +1,34 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright 2018 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.core.client.support; | ||||||
|  | 
 | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.Getter; | ||||||
|  | 
 | ||||||
|  | import org.elasticsearch.cluster.metadata.AliasMetaData; | ||||||
|  | 
 | ||||||
|  | import com.fasterxml.jackson.annotation.JsonCreator; | ||||||
|  | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||||
|  | import com.fasterxml.jackson.annotation.JsonProperty; | ||||||
|  | 
 | ||||||
|  | @JsonIgnoreProperties(ignoreUnknown=true) | ||||||
|  | @Data | ||||||
|  | public class AliasData { | ||||||
|  | 	String filter = null; | ||||||
|  | 	String routing = null; | ||||||
|  | 	String search_routing = null; | ||||||
|  | 	String index_routing= null; | ||||||
|  | } | ||||||
| @ -1,2 +1,4 @@ | |||||||
| http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.0.xsd | http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.0.xsd | ||||||
| http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.0.xsd | http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.1.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.1.xsd | ||||||
|  | http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.0.xsd | ||||||
|  | http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.1.xsd | ||||||
|  | |||||||
| @ -0,0 +1,172 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||||
|  | <xsd:schema xmlns="http://www.springframework.org/schema/data/elasticsearch" | ||||||
|  |             xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||||||
|  |             xmlns:beans="http://www.springframework.org/schema/beans" | ||||||
|  |             xmlns:tool="http://www.springframework.org/schema/tool" | ||||||
|  |             xmlns:repository="http://www.springframework.org/schema/data/repository" | ||||||
|  |             targetNamespace="http://www.springframework.org/schema/data/elasticsearch" | ||||||
|  |             elementFormDefault="qualified" | ||||||
|  |             attributeFormDefault="unqualified"> | ||||||
|  | 
 | ||||||
|  |     <xsd:import namespace="http://www.springframework.org/schema/beans"/> | ||||||
|  |     <xsd:import namespace="http://www.springframework.org/schema/tool"/> | ||||||
|  |     <xsd:import namespace="http://www.springframework.org/schema/data/repository" | ||||||
|  |                 schemaLocation="http://www.springframework.org/schema/data/repository/spring-repository.xsd"/> | ||||||
|  | 
 | ||||||
|  |     <xsd:element name="repositories"> | ||||||
|  |         <xsd:complexType> | ||||||
|  |             <xsd:complexContent> | ||||||
|  |                 <xsd:extension base="repository:repositories"> | ||||||
|  |                     <xsd:attributeGroup ref="repository:repository-attributes"/> | ||||||
|  |                     <xsd:attribute name="elasticsearch-template-ref" type="elasticsearchTemplateRef" | ||||||
|  |                                    default="elasticsearchTemplate"/> | ||||||
|  |                 </xsd:extension> | ||||||
|  |             </xsd:complexContent> | ||||||
|  |         </xsd:complexType> | ||||||
|  |     </xsd:element> | ||||||
|  | 
 | ||||||
|  |     <xsd:simpleType name="elasticsearchTemplateRef"> | ||||||
|  |         <xsd:annotation> | ||||||
|  |             <xsd:appinfo> | ||||||
|  |                 <tool:annotation kind="ref"> | ||||||
|  |                     <tool:assignable-to type="org.springframework.data.elasticsearch.core.ElasticsearchTemplate"/> | ||||||
|  |                 </tool:annotation> | ||||||
|  |             </xsd:appinfo> | ||||||
|  |         </xsd:annotation> | ||||||
|  |         <xsd:union memberTypes="xsd:string"/> | ||||||
|  |     </xsd:simpleType> | ||||||
|  | 
 | ||||||
|  |     <xsd:element name="node-client"> | ||||||
|  |         <xsd:annotation> | ||||||
|  |             <xsd:documentation/> | ||||||
|  |             <xsd:appinfo> | ||||||
|  |                 <tool:assignable-to type="org.elasticsearch.client.Client"/> | ||||||
|  |             </xsd:appinfo> | ||||||
|  |         </xsd:annotation> | ||||||
|  |         <xsd:complexType> | ||||||
|  |             <xsd:complexContent> | ||||||
|  |                 <xsd:extension base="beans:identifiedType"> | ||||||
|  |                     <xsd:attribute name="local" type="xsd:boolean" default="false"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[local here means local on the JVM (well, actually class loader) level, meaning that two local servers started within the same JVM will discover themselves and form a cluster]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="cluster-name" type="xsd:string" default="elasticsearch"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[Name of the cluster in which this instance of node client will connect to]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="http-enabled" type="xsd:boolean" default="true"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[ to enable or disable http port ]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="path-data" type="xsd:string" default=""> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[ path to the data folder for node client ]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="path-home" type="xsd:string" default=""> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[ path to the home folder for node client ]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="path-configuration" type="xsd:string" default=""> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[ path to configuration file for node client ]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                 </xsd:extension> | ||||||
|  |             </xsd:complexContent> | ||||||
|  |         </xsd:complexType> | ||||||
|  |     </xsd:element> | ||||||
|  |     <xsd:element name="transport-client"> | ||||||
|  |         <xsd:annotation> | ||||||
|  |             <xsd:documentation/> | ||||||
|  |             <xsd:appinfo> | ||||||
|  |                 <tool:assignable-to type="org.elasticsearch.client.Client"/> | ||||||
|  |             </xsd:appinfo> | ||||||
|  |         </xsd:annotation> | ||||||
|  |         <xsd:complexType> | ||||||
|  |             <xsd:complexContent> | ||||||
|  |                 <xsd:extension base="beans:identifiedType"> | ||||||
|  |                     <xsd:attribute name="cluster-nodes" type="xsd:string" default="127.0.0.1:9300"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[The comma delimited list of host:port entries to use for elasticsearch cluster.]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="cluster-name" type="xsd:string" default="elasticsearch"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[Name of the cluster in which this instance of node client will connect to]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="client-transport-sniff" type="xsd:boolean" default="true"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[The client allows to sniff the rest of the cluster, and add those into its list of machines to use.]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="client-transport-ignore-cluster-name" type="xsd:boolean" default="false"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[Set to true to ignore cluster name validation of connected nodes. (since 0.19.4)]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="client-transport-ping-timeout" type="xsd:string" default="5s"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[The time to wait for a ping response from a node. Defaults to 5s.]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                     <xsd:attribute name="client-transport-nodes-sampler-interval" type="xsd:string" default="5s"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[How often to sample / ping the nodes listed and connected. Defaults to 5s.]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                 </xsd:extension> | ||||||
|  |             </xsd:complexContent> | ||||||
|  |         </xsd:complexType> | ||||||
|  |     </xsd:element> | ||||||
|  |     <xsd:element name="rest-client"> | ||||||
|  |     	 <xsd:annotation> | ||||||
|  |             <xsd:documentation/> | ||||||
|  |             <xsd:appinfo> | ||||||
|  |                 <tool:assignable-to type="org.elasticsearch.client.RestHighLevelClient"/> | ||||||
|  |             </xsd:appinfo> | ||||||
|  |         </xsd:annotation> | ||||||
|  |        	<xsd:complexType> | ||||||
|  |             <xsd:complexContent> | ||||||
|  |                 <xsd:extension base="beans:identifiedType"> | ||||||
|  |                     <xsd:attribute name="hosts" type="xsd:string" default="http://127.0.0.1:9200"> | ||||||
|  |                         <xsd:annotation> | ||||||
|  |                             <xsd:documentation> | ||||||
|  |                                 <![CDATA[The comma delimited list of host:port entries to use for elasticsearch cluster.]]> | ||||||
|  |                             </xsd:documentation> | ||||||
|  |                         </xsd:annotation> | ||||||
|  |                     </xsd:attribute> | ||||||
|  |                	</xsd:extension> | ||||||
|  | 			</xsd:complexContent> | ||||||
|  | 		</xsd:complexType> | ||||||
|  |     </xsd:element> | ||||||
|  | </xsd:schema> | ||||||
| @ -1,55 +1,63 @@ | |||||||
| /* | /* | ||||||
|  * Copyright 2013 the original author or authors. |  * Copyright 2013-2018 the original author or authors. | ||||||
|  * |  * | ||||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  * you may not use this file except in compliance with the License. |  * you may not use this file except in compliance with the License. | ||||||
|  * You may obtain a copy of the License at |  * You may obtain a copy of the License at | ||||||
|  * |  * | ||||||
|  *      http://www.apache.org/licenses/LICENSE-2.0 |  *      http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  * |  * | ||||||
|  * Unless required by applicable law or agreed to in writing, software |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  * distributed under the License is distributed on an "AS IS" BASIS, |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  * See the License for the specific language governing permissions and |  * See the License for the specific language governing permissions and | ||||||
|  * limitations under the License. |  * limitations under the License. | ||||||
|  */ |  */ | ||||||
| package org.springframework.data.elasticsearch.config; | package org.springframework.data.elasticsearch.config; | ||||||
| 
 | 
 | ||||||
| import static org.hamcrest.CoreMatchers.*; | import static org.hamcrest.CoreMatchers.*; | ||||||
| import static org.hamcrest.core.Is.is; | import static org.hamcrest.core.Is.is; | ||||||
| import static org.junit.Assert.*; | import static org.junit.Assert.*; | ||||||
| 
 | 
 | ||||||
| import org.junit.Test; | import org.junit.Test; | ||||||
| import org.junit.runner.RunWith; | import org.junit.runner.RunWith; | ||||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||||
| import org.springframework.context.ApplicationContext; | import org.springframework.context.ApplicationContext; | ||||||
| import org.springframework.data.elasticsearch.client.TransportClientFactoryBean; | import org.springframework.data.elasticsearch.client.RestClientFactoryBean; | ||||||
| import org.springframework.data.elasticsearch.repositories.sample.SampleElasticsearchRepository; | import org.springframework.data.elasticsearch.client.TransportClientFactoryBean; | ||||||
| import org.springframework.test.context.ContextConfiguration; | import org.springframework.data.elasticsearch.repositories.sample.SampleElasticsearchRepository; | ||||||
| import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; | import org.springframework.test.context.ContextConfiguration; | ||||||
| 
 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; | ||||||
| /** | 
 | ||||||
|  * @author Rizwan Idrees | /** | ||||||
|  * @author Mohsin Husen |  * @author Rizwan Idrees | ||||||
|  */ |  * @author Mohsin Husen | ||||||
| 
 |  * @author Don Wellington | ||||||
| @RunWith(SpringJUnit4ClassRunner.class) |  */ | ||||||
| @ContextConfiguration("namespace.xml") | 
 | ||||||
| public class ElasticsearchNamespaceHandlerTests { | @RunWith(SpringJUnit4ClassRunner.class) | ||||||
| 
 | @ContextConfiguration("namespace.xml") | ||||||
| 	@Autowired | public class ElasticsearchNamespaceHandlerTests { | ||||||
| 	private ApplicationContext context; | 
 | ||||||
| 
 | 	@Autowired | ||||||
| 	@Test | 	private ApplicationContext context; | ||||||
| 	public void shouldCreateTransportClient() { | 
 | ||||||
| 		assertThat(context.getBean(TransportClientFactoryBean.class), is(notNullValue())); | 	@Test | ||||||
| 		assertThat(context.getBean(TransportClientFactoryBean.class), is(instanceOf(TransportClientFactoryBean.class))); | 	public void shouldCreateTransportClient() { | ||||||
| 	} | 		assertThat(context.getBean(TransportClientFactoryBean.class), is(notNullValue())); | ||||||
| 
 | 		assertThat(context.getBean(TransportClientFactoryBean.class), is(instanceOf(TransportClientFactoryBean.class))); | ||||||
| 	@Test | 	} | ||||||
| 	public void shouldCreateRepository() { | 
 | ||||||
| 		assertThat(context.getBean(TransportClientFactoryBean.class), is(notNullValue())); | 	@Test | ||||||
| 		assertThat(context.getBean(SampleElasticsearchRepository.class), | 	public void shouldCreateRepository() { | ||||||
| 				is(instanceOf(SampleElasticsearchRepository.class))); | 		assertThat(context.getBean(TransportClientFactoryBean.class), is(notNullValue())); | ||||||
| 	} | 		assertThat(context.getBean(SampleElasticsearchRepository.class), | ||||||
| } | 				is(instanceOf(SampleElasticsearchRepository.class))); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	@Test | ||||||
|  | 	public void shouldCreateRestClient() { | ||||||
|  | 		assertThat(context.getBean(RestClientFactoryBean.class), is(notNullValue())); | ||||||
|  | 		assertThat(context.getBean(RestClientFactoryBean.class), is(instanceOf(RestClientFactoryBean.class))); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * Copyright 2013-2016 the original author or authors. |  * Copyright 2013-2018 the original author or authors. | ||||||
|  * |  * | ||||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  * you may not use this file except in compliance with the License. |  * you may not use this file except in compliance with the License. | ||||||
| @ -21,6 +21,7 @@ import static org.hamcrest.CoreMatchers.*; | |||||||
| import static org.junit.Assert.*; | import static org.junit.Assert.*; | ||||||
| import static org.springframework.data.elasticsearch.utils.IndexBuilder.*; | import static org.springframework.data.elasticsearch.utils.IndexBuilder.*; | ||||||
| 
 | 
 | ||||||
|  | import java.io.ByteArrayOutputStream; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| import java.math.BigDecimal; | import java.math.BigDecimal; | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
| @ -45,13 +46,19 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; | |||||||
|  * @author Mohsin Husen |  * @author Mohsin Husen | ||||||
|  * @author Keivn Leturc |  * @author Keivn Leturc | ||||||
|  * @author Nordine Bittich |  * @author Nordine Bittich | ||||||
|  |  * @author Don Wellington | ||||||
|  */ |  */ | ||||||
| @RunWith(SpringJUnit4ClassRunner.class) | @RunWith(SpringJUnit4ClassRunner.class) | ||||||
| @ContextConfiguration("classpath:elasticsearch-template-test.xml") | @ContextConfiguration("classpath:elasticsearch-template-test.xml") | ||||||
| public class MappingBuilderTests { | public class MappingBuilderTests { | ||||||
| 
 | 
 | ||||||
| 	@Autowired | 	@Autowired private ElasticsearchTemplate elasticsearchTemplate; | ||||||
| 	private ElasticsearchTemplate elasticsearchTemplate; | 
 | ||||||
|  | 	private String xContentBuilderToString(XContentBuilder builder) { | ||||||
|  | 		builder.close(); | ||||||
|  | 		ByteArrayOutputStream bos = (ByteArrayOutputStream) builder.getOutputStream(); | ||||||
|  | 		return bos.toString(); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	@Test | 	@Test | ||||||
| 	public void shouldNotFailOnCircularReference() { | 	public void shouldNotFailOnCircularReference() { | ||||||
| @ -63,43 +70,43 @@ public class MappingBuilderTests { | |||||||
| 
 | 
 | ||||||
| 	@Test | 	@Test | ||||||
| 	public void testInfiniteLoopAvoidance() throws IOException { | 	public void testInfiniteLoopAvoidance() throws IOException { | ||||||
| 		final String expected = "{\"mapping\":{\"properties\":{\"message\":{\"store\":true,\"" + | 		final String expected = "{\"mapping\":{\"properties\":{\"message\":{\"store\":true,\"" | ||||||
| 				"type\":\"text\",\"index\":false," + | 				+ "type\":\"text\",\"index\":false," + "\"analyzer\":\"standard\"}}}}"; | ||||||
| 				"\"analyzer\":\"standard\"}}}}"; |  | ||||||
| 
 | 
 | ||||||
| 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(SampleTransientEntity.class, "mapping", "id", null); | 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(SampleTransientEntity.class, "mapping", "id", null); | ||||||
| 		assertThat(xContentBuilder.string(), is(expected)); | 		assertThat(xContentBuilderToString(xContentBuilder), is(expected)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Test | 	@Test | ||||||
| 	public void shouldUseValueFromAnnotationType() throws IOException { | 	public void shouldUseValueFromAnnotationType() throws IOException { | ||||||
| 		//Given | 		// Given | ||||||
| 		final String expected = "{\"mapping\":{\"properties\":{\"price\":{\"store\":false,\"type\":\"double\"}}}}"; | 		final String expected = "{\"mapping\":{\"properties\":{\"price\":{\"store\":false,\"type\":\"double\"}}}}"; | ||||||
| 
 | 
 | ||||||
| 		//When | 		// When | ||||||
| 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(StockPrice.class, "mapping", "id", null); | 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(StockPrice.class, "mapping", "id", null); | ||||||
| 
 | 
 | ||||||
| 		//Then | 		// Then | ||||||
| 		assertThat(xContentBuilder.string(), is(expected)); | 		assertThat(xContentBuilderToString(xContentBuilder), is(expected)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Test | 	@Test | ||||||
| 	public void shouldAddStockPriceDocumentToIndex() throws IOException { | 	public void shouldAddStockPriceDocumentToIndex() throws IOException { | ||||||
| 		//Given | 		// Given | ||||||
| 
 | 
 | ||||||
| 		//When | 		// When | ||||||
| 		elasticsearchTemplate.deleteIndex(StockPrice.class); | 		elasticsearchTemplate.deleteIndex(StockPrice.class); | ||||||
| 		elasticsearchTemplate.createIndex(StockPrice.class); | 		elasticsearchTemplate.createIndex(StockPrice.class); | ||||||
| 		elasticsearchTemplate.putMapping(StockPrice.class); | 		elasticsearchTemplate.putMapping(StockPrice.class); | ||||||
| 		String symbol = "AU"; | 		String symbol = "AU"; | ||||||
| 		double price = 2.34; | 		double price = 2.34; | ||||||
| 		String id = "abc"; | 		String id = "abc"; | ||||||
| 		elasticsearchTemplate.index(buildIndex(StockPrice.builder().id(id).symbol(symbol).price(new BigDecimal(price)).build())); | 		elasticsearchTemplate | ||||||
|  | 				.index(buildIndex(StockPrice.builder().id(id).symbol(symbol).price(new BigDecimal(price)).build())); | ||||||
| 		elasticsearchTemplate.refresh(StockPrice.class); | 		elasticsearchTemplate.refresh(StockPrice.class); | ||||||
| 
 | 
 | ||||||
| 		SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); | 		SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); | ||||||
| 		List<StockPrice> result = elasticsearchTemplate.queryForList(searchQuery, StockPrice.class); | 		List<StockPrice> result = elasticsearchTemplate.queryForList(searchQuery, StockPrice.class); | ||||||
| 		//Then | 		// Then | ||||||
| 		assertThat(result.size(), is(1)); | 		assertThat(result.size(), is(1)); | ||||||
| 		StockPrice entry = result.get(0); | 		StockPrice entry = result.get(0); | ||||||
| 		assertThat(entry.getSymbol(), is(symbol)); | 		assertThat(entry.getSymbol(), is(symbol)); | ||||||
| @ -110,7 +117,7 @@ public class MappingBuilderTests { | |||||||
| 	public void shouldCreateMappingForSpecifiedParentType() throws IOException { | 	public void shouldCreateMappingForSpecifiedParentType() throws IOException { | ||||||
| 		final String expected = "{\"mapping\":{\"_parent\":{\"type\":\"parentType\"},\"properties\":{}}}"; | 		final String expected = "{\"mapping\":{\"_parent\":{\"type\":\"parentType\"},\"properties\":{}}}"; | ||||||
| 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(MinimalEntity.class, "mapping", "id", "parentType"); | 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(MinimalEntity.class, "mapping", "id", "parentType"); | ||||||
| 		assertThat(xContentBuilder.string(), is(expected)); | 		assertThat(xContentBuilderToString(xContentBuilder), is(expected)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* | 	/* | ||||||
| @ -118,13 +125,12 @@ public class MappingBuilderTests { | |||||||
| 	 */ | 	 */ | ||||||
| 	@Test | 	@Test | ||||||
| 	public void shouldBuildMappingWithSuperclass() throws IOException { | 	public void shouldBuildMappingWithSuperclass() throws IOException { | ||||||
| 		final String expected = "{\"mapping\":{\"properties\":{\"message\":{\"store\":true,\"" + | 		final String expected = "{\"mapping\":{\"properties\":{\"message\":{\"store\":true,\"" | ||||||
| 				"type\":\"text\",\"index\":false,\"analyzer\":\"standard\"}" + | 				+ "type\":\"text\",\"index\":false,\"analyzer\":\"standard\"}" + ",\"createdDate\":{\"store\":false," | ||||||
| 				",\"createdDate\":{\"store\":false," + | 				+ "\"type\":\"date\",\"index\":false}}}}"; | ||||||
| 				"\"type\":\"date\",\"index\":false}}}}"; |  | ||||||
| 
 | 
 | ||||||
| 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(SampleInheritedEntity.class, "mapping", "id", null); | 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(SampleInheritedEntity.class, "mapping", "id", null); | ||||||
| 		assertThat(xContentBuilder.string(), is(expected)); | 		assertThat(xContentBuilderToString(xContentBuilder), is(expected)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* | 	/* | ||||||
| @ -132,21 +138,22 @@ public class MappingBuilderTests { | |||||||
| 	 */ | 	 */ | ||||||
| 	@Test | 	@Test | ||||||
| 	public void shouldAddSampleInheritedEntityDocumentToIndex() throws IOException { | 	public void shouldAddSampleInheritedEntityDocumentToIndex() throws IOException { | ||||||
| 		//Given | 		// Given | ||||||
| 
 | 
 | ||||||
| 		//When | 		// When | ||||||
| 		elasticsearchTemplate.deleteIndex(SampleInheritedEntity.class); | 		elasticsearchTemplate.deleteIndex(SampleInheritedEntity.class); | ||||||
| 		elasticsearchTemplate.createIndex(SampleInheritedEntity.class); | 		elasticsearchTemplate.createIndex(SampleInheritedEntity.class); | ||||||
| 		elasticsearchTemplate.putMapping(SampleInheritedEntity.class); | 		elasticsearchTemplate.putMapping(SampleInheritedEntity.class); | ||||||
| 		Date createdDate = new Date(); | 		Date createdDate = new Date(); | ||||||
| 		String message = "msg"; | 		String message = "msg"; | ||||||
| 		String id = "abc"; | 		String id = "abc"; | ||||||
| 		elasticsearchTemplate.index(new SampleInheritedEntityBuilder(id).createdDate(createdDate).message(message).buildIndex()); | 		elasticsearchTemplate | ||||||
|  | 				.index(new SampleInheritedEntityBuilder(id).createdDate(createdDate).message(message).buildIndex()); | ||||||
| 		elasticsearchTemplate.refresh(SampleInheritedEntity.class); | 		elasticsearchTemplate.refresh(SampleInheritedEntity.class); | ||||||
| 
 | 
 | ||||||
| 		SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); | 		SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); | ||||||
| 		List<SampleInheritedEntity> result = elasticsearchTemplate.queryForList(searchQuery, SampleInheritedEntity.class); | 		List<SampleInheritedEntity> result = elasticsearchTemplate.queryForList(searchQuery, SampleInheritedEntity.class); | ||||||
| 		//Then | 		// Then | ||||||
| 		assertThat(result.size(), is(1)); | 		assertThat(result.size(), is(1)); | ||||||
| 		SampleInheritedEntity entry = result.get(0); | 		SampleInheritedEntity entry = result.get(0); | ||||||
| 		assertThat(entry.getCreatedDate(), is(createdDate)); | 		assertThat(entry.getCreatedDate(), is(createdDate)); | ||||||
| @ -155,13 +162,13 @@ public class MappingBuilderTests { | |||||||
| 
 | 
 | ||||||
| 	@Test | 	@Test | ||||||
| 	public void shouldBuildMappingsForGeoPoint() throws IOException { | 	public void shouldBuildMappingsForGeoPoint() throws IOException { | ||||||
| 		//given | 		// given | ||||||
| 
 | 
 | ||||||
| 		//when | 		// when | ||||||
| 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(GeoEntity.class, "mapping", "id", null); | 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(GeoEntity.class, "mapping", "id", null); | ||||||
| 
 | 
 | ||||||
| 		//then | 		// then | ||||||
| 		final String result = xContentBuilder.string(); | 		final String result = xContentBuilderToString(xContentBuilder); | ||||||
| 
 | 
 | ||||||
| 		assertThat(result, containsString("\"pointA\":{\"type\":\"geo_point\"")); | 		assertThat(result, containsString("\"pointA\":{\"type\":\"geo_point\"")); | ||||||
| 		assertThat(result, containsString("\"pointB\":{\"type\":\"geo_point\"")); | 		assertThat(result, containsString("\"pointB\":{\"type\":\"geo_point\"")); | ||||||
| @ -174,40 +181,40 @@ public class MappingBuilderTests { | |||||||
| 	 */ | 	 */ | ||||||
| 	@Test | 	@Test | ||||||
| 	public void shouldHandleReverseRelationship() { | 	public void shouldHandleReverseRelationship() { | ||||||
| 		//given | 		// given | ||||||
| 		elasticsearchTemplate.createIndex(User.class); | 		elasticsearchTemplate.createIndex(User.class); | ||||||
| 		elasticsearchTemplate.putMapping(User.class); | 		elasticsearchTemplate.putMapping(User.class); | ||||||
| 		elasticsearchTemplate.createIndex(Group.class); | 		elasticsearchTemplate.createIndex(Group.class); | ||||||
| 		elasticsearchTemplate.putMapping(Group.class); | 		elasticsearchTemplate.putMapping(Group.class); | ||||||
| 		//when | 		// when | ||||||
| 
 | 
 | ||||||
| 		//then | 		// then | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Test | 	@Test | ||||||
| 	public void shouldMapBooks() { | 	public void shouldMapBooks() { | ||||||
| 		//given | 		// given | ||||||
| 		elasticsearchTemplate.createIndex(Book.class); | 		elasticsearchTemplate.createIndex(Book.class); | ||||||
| 		elasticsearchTemplate.putMapping(Book.class); | 		elasticsearchTemplate.putMapping(Book.class); | ||||||
| 		//when | 		// when | ||||||
| 		//then | 		// then | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Test // DATAES-420 | 	@Test // DATAES-420 | ||||||
| 	public void shouldUseBothAnalyzer() { | 	public void shouldUseBothAnalyzer() { | ||||||
| 		//given | 		// given | ||||||
| 		elasticsearchTemplate.deleteIndex(Book.class); | 		elasticsearchTemplate.deleteIndex(Book.class); | ||||||
| 		elasticsearchTemplate.createIndex(Book.class); | 		elasticsearchTemplate.createIndex(Book.class); | ||||||
| 		elasticsearchTemplate.putMapping(Book.class); | 		elasticsearchTemplate.putMapping(Book.class); | ||||||
| 
 | 
 | ||||||
| 		//when | 		// when | ||||||
| 		Map mapping = elasticsearchTemplate.getMapping(Book.class); | 		Map mapping = elasticsearchTemplate.getMapping(Book.class); | ||||||
| 		Map descriptionMapping = (Map) ((Map) mapping.get("properties")).get("description"); | 		Map descriptionMapping = (Map) ((Map) mapping.get("properties")).get("description"); | ||||||
| 		Map prefixDescription = (Map) ((Map) descriptionMapping.get("fields")).get("prefix"); | 		Map prefixDescription = (Map) ((Map) descriptionMapping.get("fields")).get("prefix"); | ||||||
| 
 | 
 | ||||||
| 		//then | 		// then | ||||||
| 		assertThat(prefixDescription.size(), is(3)); | 		assertThat(prefixDescription.size(), is(3)); | ||||||
| 		assertThat(prefixDescription.get("type"), equalTo("text")); | 		assertThat(prefixDescription.get("type"), equalTo("text")); | ||||||
| 		assertThat(prefixDescription.get("analyzer"), equalTo("stop")); | 		assertThat(prefixDescription.get("analyzer"), equalTo("stop")); | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * Copyright 2013-2014 the original author or authors. |  * Copyright 2013-2018 the original author or authors. | ||||||
|  * |  * | ||||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  * you may not use this file except in compliance with the License. |  * you may not use this file except in compliance with the License. | ||||||
| @ -16,6 +16,7 @@ | |||||||
| package org.springframework.data.elasticsearch.core; | package org.springframework.data.elasticsearch.core; | ||||||
| 
 | 
 | ||||||
| import java.beans.IntrospectionException; | import java.beans.IntrospectionException; | ||||||
|  | import java.io.ByteArrayOutputStream; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| 
 | 
 | ||||||
| import org.elasticsearch.common.xcontent.XContentBuilder; | import org.elasticsearch.common.xcontent.XContentBuilder; | ||||||
| @ -26,6 +27,7 @@ import org.springframework.data.elasticsearch.entities.SampleDateMappingEntity; | |||||||
| /** | /** | ||||||
|  * @author Jakub Vavrik |  * @author Jakub Vavrik | ||||||
|  * @author Mohsin Husen |  * @author Mohsin Husen | ||||||
|  |  * @author Don Wellington | ||||||
|  */ |  */ | ||||||
| public class SimpleElasticsearchDateMappingTests { | public class SimpleElasticsearchDateMappingTests { | ||||||
| 
 | 
 | ||||||
| @ -37,6 +39,9 @@ public class SimpleElasticsearchDateMappingTests { | |||||||
| 	@Test | 	@Test | ||||||
| 	public void testCorrectDateMappings() throws NoSuchFieldException, IntrospectionException, IOException { | 	public void testCorrectDateMappings() throws NoSuchFieldException, IntrospectionException, IOException { | ||||||
| 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(SampleDateMappingEntity.class, "mapping", "id", null); | 		XContentBuilder xContentBuilder = MappingBuilder.buildMapping(SampleDateMappingEntity.class, "mapping", "id", null); | ||||||
| 		Assert.assertEquals(EXPECTED_MAPPING, xContentBuilder.string()); | 		xContentBuilder.close(); | ||||||
|  | 		ByteArrayOutputStream bos = (ByteArrayOutputStream) xContentBuilder.getOutputStream(); | ||||||
|  | 		String result = bos.toString(); | ||||||
|  | 		Assert.assertEquals(EXPECTED_MAPPING, result); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright 2018 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.repositories; | ||||||
|  | 
 | ||||||
|  | import org.junit.Before; | ||||||
|  | import org.junit.runner.RunWith; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; | ||||||
|  | import org.springframework.data.elasticsearch.entities.SampleEntity; | ||||||
|  | import org.springframework.test.context.ContextConfiguration; | ||||||
|  | import org.springframework.test.context.junit4.SpringRunner; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  * @author Don Wellington | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | @RunWith(SpringRunner.class) | ||||||
|  | @ContextConfiguration("classpath:custom-method-repository-rest-test.xml") | ||||||
|  | public class CustomMethodRepositoryRestTests extends CustomMethodRepositoryBaseTests { | ||||||
|  | 	@Autowired private ElasticsearchRestTemplate elasticsearchTemplate; | ||||||
|  | 
 | ||||||
|  | 	@Before | ||||||
|  | 	public void before() { | ||||||
|  | 		elasticsearchTemplate.deleteIndex(SampleEntity.class); | ||||||
|  | 		elasticsearchTemplate.createIndex(SampleEntity.class); | ||||||
|  | 		elasticsearchTemplate.putMapping(SampleEntity.class); | ||||||
|  | 		elasticsearchTemplate.refresh(SampleEntity.class); | ||||||
|  | 	} | ||||||
|  | } | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										13
									
								
								src/test/resources/custom-method-repository-rest-test.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/test/resources/custom-method-repository-rest-test.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <beans xmlns="http://www.springframework.org/schema/beans" | ||||||
|  |        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |        xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch" | ||||||
|  |        xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd | ||||||
|  | 		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> | ||||||
|  | 
 | ||||||
|  |     <import resource="elasticsearch-rest-template-test.xml"/> | ||||||
|  | 
 | ||||||
|  |     <elasticsearch:repositories | ||||||
|  |             base-package="org.springframework.data.elasticsearch.repositories.custom"/> | ||||||
|  | 
 | ||||||
|  | </beans> | ||||||
							
								
								
									
										17
									
								
								src/test/resources/elasticsearch-rest-template-test.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/test/resources/elasticsearch-rest-template-test.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <beans xmlns="http://www.springframework.org/schema/beans" | ||||||
|  |        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |        xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch" | ||||||
|  |        xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd | ||||||
|  | 		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> | ||||||
|  | 
 | ||||||
|  |     <import resource="infrastructure.xml"/> | ||||||
|  | 
 | ||||||
|  |     <bean name="elasticsearchTemplate" | ||||||
|  |           class="org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate"> | ||||||
|  |         <constructor-arg name="client" ref="restClient"/> | ||||||
|  |     </bean> | ||||||
|  |      | ||||||
|  |     <elasticsearch:rest-client id="restClient"/> | ||||||
|  | 
 | ||||||
|  | </beans> | ||||||
| @ -6,7 +6,7 @@ | |||||||
| 		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> | 		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> | ||||||
| 
 | 
 | ||||||
|     <elasticsearch:node-client id="client" local="true" cluster-name="#{T(java.util.UUID).randomUUID().toString()}" |     <elasticsearch:node-client id="client" local="true" cluster-name="#{T(java.util.UUID).randomUUID().toString()}" | ||||||
|                                http-enabled="false" path-data="target/elasticsearchTestData" path-home="src/test/resources/test-home-dir" |                                http-enabled="true" path-data="target/elasticsearchTestData" path-home="src/test/resources/test-home-dir" | ||||||
|                                path-configuration="node-client-configuration.yml"/> |                                path-configuration="node-client-configuration.yml"/> | ||||||
| 
 | 
 | ||||||
|     <!-- ip4 --> |     <!-- ip4 --> | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
| <beans xmlns="http://www.springframework.org/schema/beans" | <beans xmlns="http://www.springframework.org/schema/beans" | ||||||
|        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|        xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch" |        xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch" | ||||||
|        xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd |        xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.1.xsd | ||||||
| 		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> | 		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> | ||||||
| 
 | 
 | ||||||
|     <elasticsearch:node-client id="client" local="true" |     <elasticsearch:node-client id="client" local="true" | ||||||
| @ -18,5 +18,7 @@ | |||||||
| 
 | 
 | ||||||
|     <elasticsearch:repositories |     <elasticsearch:repositories | ||||||
|             base-package="org.springframework.data.elasticsearch.repositories.sample"/> |             base-package="org.springframework.data.elasticsearch.repositories.sample"/> | ||||||
|  |      | ||||||
|  |     <elasticsearch:rest-client id="restClient"/> | ||||||
| 
 | 
 | ||||||
| </beans> | </beans> | ||||||
| @ -37,7 +37,7 @@ classname=org.elasticsearch.script.expression.ExpressionPlugin | |||||||
| java.version=1.8 | java.version=1.8 | ||||||
| # | # | ||||||
| # 'elasticsearch.version': version of elasticsearch compiled against | # 'elasticsearch.version': version of elasticsearch compiled against | ||||||
| elasticsearch.version=6.2.2 | elasticsearch.version=6.3.0 | ||||||
| ### optional elements for plugins: | ### optional elements for plugins: | ||||||
| # | # | ||||||
| #  'extended.plugins': other plugins this plugin extends through SPI | #  'extended.plugins': other plugins this plugin extends through SPI | ||||||
| @ -47,4 +47,4 @@ extended.plugins= | |||||||
| has.native.controller=false | has.native.controller=false | ||||||
| # | # | ||||||
| # 'requires.keystore': whether or not the plugin needs the elasticsearch keystore be created | # 'requires.keystore': whether or not the plugin needs the elasticsearch keystore be created | ||||||
| requires.keystore=false | #requires.keystore=false | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user