Skip to content

Commit 7dbab75

Browse files
committed
DATAES-50 - Enabled support for scripts for node client, added missing groovy lib
1 parent d6603f8 commit 7dbab75

File tree

9 files changed

+73
-29
lines changed

9 files changed

+73
-29
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@
128128
<scope>test</scope>
129129
</dependency>
130130

131+
<dependency>
132+
<groupId>org.codehaus.groovy</groupId>
133+
<artifactId>groovy-all</artifactId>
134+
<version>2.3.5</version>
135+
<scope>test</scope>
136+
</dependency>
137+
131138
</dependencies>
132139

133140
<build>

src/main/java/org/springframework/data/elasticsearch/client/NodeClientFactoryBean.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,21 @@
1717

1818
import static org.elasticsearch.node.NodeBuilder.*;
1919

20+
import java.io.IOException;
21+
22+
import org.apache.commons.lang.StringUtils;
23+
import org.apache.lucene.util.IOUtils;
2024
import org.elasticsearch.client.Client;
2125
import org.elasticsearch.client.node.NodeClient;
26+
import org.elasticsearch.common.io.stream.InputStreamStreamInput;
2227
import org.elasticsearch.common.settings.ImmutableSettings;
28+
import org.elasticsearch.common.settings.Settings;
2329
import org.slf4j.Logger;
2430
import org.slf4j.LoggerFactory;
2531
import org.springframework.beans.factory.DisposableBean;
2632
import org.springframework.beans.factory.FactoryBean;
2733
import org.springframework.beans.factory.InitializingBean;
34+
import org.springframework.core.io.ClassPathResource;
2835

2936
/**
3037
* NodeClientFactoryBean
@@ -41,6 +48,7 @@ public class NodeClientFactoryBean implements FactoryBean<NodeClient>, Initializ
4148
private String clusterName;
4249
private NodeClient nodeClient;
4350
private String pathData;
51+
private String pathConfiguration;
4452

4553
NodeClientFactoryBean() {
4654
}
@@ -67,14 +75,25 @@ public boolean isSingleton() {
6775
@Override
6876
public void afterPropertiesSet() throws Exception {
6977
ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder()
78+
.put(loadConfig())
7079
.put("http.enabled", String.valueOf(this.enableHttp))
7180
.put("path.data", this.pathData);
7281

73-
7482
nodeClient = (NodeClient) nodeBuilder().settings(settings).clusterName(this.clusterName).local(this.local).node()
7583
.client();
7684
}
7785

86+
private Settings loadConfig() {
87+
if (StringUtils.isNotBlank(pathConfiguration)) {
88+
try {
89+
return ImmutableSettings.builder().loadFromUrl(new ClassPathResource(pathConfiguration).getURL()).build();
90+
} catch (IOException e) {
91+
logger.error(String.format("Unable to read node configuration from file [%s]", pathConfiguration), e);
92+
}
93+
}
94+
return ImmutableSettings.builder().build();
95+
}
96+
7897
public void setLocal(boolean local) {
7998
this.local = local;
8099
}
@@ -91,6 +110,10 @@ public void setPathData(String pathData) {
91110
this.pathData = pathData;
92111
}
93112

113+
public void setPathConfiguration(String configuration) {
114+
this.pathConfiguration = configuration;
115+
}
116+
94117
@Override
95118
public void destroy() throws Exception {
96119
try {

src/main/java/org/springframework/data/elasticsearch/config/NodeClientBeanDefinitionParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ private void setLocalSettings(Element element, BeanDefinitionBuilder builder) {
4444
builder.addPropertyValue("clusterName", element.getAttribute("cluster-name"));
4545
builder.addPropertyValue("enableHttp", Boolean.valueOf(element.getAttribute("http-enabled")));
4646
builder.addPropertyValue("pathData", element.getAttribute("path-data"));
47+
builder.addPropertyValue("pathConfiguration", element.getAttribute("path-configuration"));
4748
}
4849

4950
private AbstractBeanDefinition getSourcedBeanDefinition(BeanDefinitionBuilder builder, Element source,

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@
8787
import org.springframework.data.elasticsearch.annotations.Document;
8888
import org.springframework.data.elasticsearch.annotations.Mapping;
8989
import org.springframework.data.elasticsearch.annotations.Setting;
90-
import org.springframework.data.elasticsearch.annotations.ScriptedField;
9190
import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter;
9291
import org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter;
9392
import org.springframework.data.elasticsearch.core.facet.FacetRequest;
@@ -842,15 +841,14 @@ private SearchResponse doSearch(SearchRequestBuilder searchRequest, SearchQuery
842841
}
843842
}
844843

845-
if (!searchQuery.getScriptFields().isEmpty()) {
846-
searchRequest.addField("_source");
847-
}
848-
849-
for (ScriptField scriptedField : searchQuery.getScriptFields()) {
850-
searchRequest.addScriptField(scriptedField.fieldName(), scriptedField.script(), scriptedField.params());
851-
}
844+
if (!searchQuery.getScriptFields().isEmpty()) {
845+
searchRequest.addField("_source");
846+
for (ScriptField scriptedField : searchQuery.getScriptFields()) {
847+
searchRequest.addScriptField(scriptedField.fieldName(), scriptedField.script(), scriptedField.params());
848+
}
849+
}
852850

853-
if (CollectionUtils.isNotEmpty(searchQuery.getFacets())) {
851+
if (CollectionUtils.isNotEmpty(searchQuery.getFacets())) {
854852
for (FacetRequest facetRequest : searchQuery.getFacets()) {
855853
FacetBuilder facet = facetRequest.getFacet();
856854
if (facetRequest.applyQueryFilter() && searchQuery.getFilter() != null) {

src/main/java/org/springframework/data/elasticsearch/core/query/ScriptField.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,26 @@
66
* @author Ryan Murfitt
77
*/
88
public class ScriptField {
9-
private final String fieldName;
10-
private final String script;
11-
private final Map<String, Object> params;
129

13-
public ScriptField(String fieldName, String script, Map<String, Object> params) {
14-
this.fieldName = fieldName;
15-
this.script = script;
16-
this.params = params;
17-
}
10+
private final String fieldName;
11+
private final String script;
12+
private final Map<String, Object> params;
1813

19-
public String fieldName() {
20-
return fieldName;
21-
}
14+
public ScriptField(String fieldName, String script, Map<String, Object> params) {
15+
this.fieldName = fieldName;
16+
this.script = script;
17+
this.params = params;
18+
}
2219

23-
public String script() {
24-
return script;
25-
}
20+
public String fieldName() {
21+
return fieldName;
22+
}
2623

27-
public Map<String, Object> params() {
28-
return params;
29-
}
30-
}
24+
public String script() {
25+
return script;
26+
}
3127

28+
public Map<String, Object> params() {
29+
return params;
30+
}
31+
}

src/main/resources/org/springframework/data/elasticsearch/config/spring-elasticsearch-1.0.xsd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@
7474
</xsd:documentation>
7575
</xsd:annotation>
7676
</xsd:attribute>
77+
<xsd:attribute name="path-configuration" type="xsd:string" default="">
78+
<xsd:annotation>
79+
<xsd:documentation>
80+
<![CDATA[ path to configuration file for node client ]]>
81+
</xsd:documentation>
82+
</xsd:annotation>
83+
</xsd:attribute>
7784
</xsd:extension>
7885
</xsd:complexContent>
7986
</xsd:complexType>

src/test/java/org/springframework/data/elasticsearch/entities/SampleEntity.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.springframework.data.annotation.Id;
2020
import org.springframework.data.annotation.Version;
2121
import org.springframework.data.elasticsearch.annotations.Document;
22+
import org.springframework.data.elasticsearch.annotations.ScriptedField;
2223
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
2324

2425
/**
@@ -39,6 +40,8 @@ public class SampleEntity {
3940
private String type;
4041
private String message;
4142
private int rate;
43+
@ScriptedField
44+
private Long scriptedRate;
4245
private boolean available;
4346
private String highlightedMessage;
4447

src/test/resources/infrastructure.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd
66
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
77

8-
<elasticsearch:node-client id="client" local="true" cluster-name="#{T(java.util.UUID).randomUUID().toString()}" http-enabled="false" path-data="target/elasticsearchTestData"/>
8+
<elasticsearch:node-client id="client" local="true" cluster-name="#{T(java.util.UUID).randomUUID().toString()}"
9+
http-enabled="false" path-data="target/elasticsearchTestData"
10+
path-configuration="node-client-configuration.yml"/>
911

1012
<!--<elasticsearch:transport-client id="client" cluster-name="elasticsearch" cluster-nodes="127.0.0.1:9300" />-->
1113

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#enabled scripts - this require groovy
2+
script.inline: on
3+
script.indexed: on

0 commit comments

Comments
 (0)