Skip to content

Commit 2a00425

Browse files
author
Luc Boutier
committed
Upgrading to Elasticsearch 1.7.0. Adding way to customize queries on the query helper using ES api.
1 parent c150814 commit 2a00425

File tree

7 files changed

+93
-25
lines changed

7 files changed

+93
-25
lines changed

elasticsearch-annotations/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>fr.lucboutier.elasticsearch</groupId>
66
<artifactId>elasticsearch-mapping-parent</artifactId>
7-
<version>1.3.0</version>
7+
<version>1.4.0</version>
88
</parent>
99

1010
<artifactId>elasticsearch-annotations</artifactId>

elasticsearch-mapping/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<groupId>fr.lucboutier.elasticsearch</groupId>
55
<artifactId>elasticsearch-mapping-parent</artifactId>
6-
<version>1.3.0</version>
6+
<version>1.4.0</version>
77
</parent>
88

99
<artifactId>elasticsearch-mapping</artifactId>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.elasticsearch.mapping;
2+
3+
import org.elasticsearch.index.query.QueryBuilder;
4+
5+
/**
6+
* Interface used to allow modification of the Query Builder when using QueryHelper to generate the search query.
7+
*/
8+
public interface QueryBuilderAdapter {
9+
/**
10+
* Adapt a query.
11+
*
12+
* @param queryBuilder A query builder to adapt before adding filters, sort and other post-processing elements to the query.
13+
* @return The query builder with adaptations.
14+
*/
15+
QueryBuilder adapt(QueryBuilder queryBuilder);
16+
}

elasticsearch-mapping/src/main/java/org/elasticsearch/mapping/QueryHelper.java

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package org.elasticsearch.mapping;
22

3-
import java.util.ArrayList;
4-
import java.util.HashMap;
5-
import java.util.List;
6-
import java.util.Map;
3+
import java.util.*;
74
import java.util.Map.Entry;
8-
import java.util.Set;
95

106
import javax.annotation.Resource;
117

@@ -18,11 +14,7 @@
1814
import org.elasticsearch.common.collect.Maps;
1915
import org.elasticsearch.common.logging.ESLogger;
2016
import org.elasticsearch.common.logging.Loggers;
21-
import org.elasticsearch.index.query.BoolQueryBuilder;
22-
import org.elasticsearch.index.query.FilterBuilder;
23-
import org.elasticsearch.index.query.FilterBuilders;
24-
import org.elasticsearch.index.query.QueryBuilder;
25-
import org.elasticsearch.index.query.QueryBuilders;
17+
import org.elasticsearch.index.query.*;
2618
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
2719
import org.elasticsearch.search.facet.FacetBuilder;
2820
import org.elasticsearch.search.sort.SortBuilder;
@@ -370,12 +362,35 @@ public SearchQueryHelperBuilder customFilter(FilterBuilder filterBuilder) {
370362
* @param size The maximum number of elements to return.
371363
*/
372364
public SearchResponse search(int from, int size) {
365+
SearchRequestBuilder searchRequestBuilder = generate(from, size);
366+
return searchRequestBuilder.execute().actionGet();
367+
}
368+
369+
/**
370+
* Generate a SearchRequestBuilder based on the query helper configuration.
371+
*
372+
* @return an ElasticSearch SearchRequestBuilder that can be used for more advanced configuraiton.
373+
*/
374+
public SearchRequestBuilder generate() {
375+
return generate(null);
376+
}
377+
378+
/**
379+
* Generate a SearchRequestBuilder based on the query helper configuration.
380+
*
381+
* @return an ElasticSearch SearchRequestBuilder that can be used for more advanced configuraiton.
382+
*/
383+
public SearchRequestBuilder generate(QueryBuilderAdapter queryBuilderAdapter) {
373384
SearchRequestBuilder searchRequestBuilder = esClient.getClient().prepareSearch(this.indices);
374-
searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH).setSize(size).setFrom(from);
385+
searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH);
386+
QueryBuilder query = queryBuilder;
387+
if (queryBuilderAdapter != null) {
388+
query = queryBuilderAdapter.adapt(queryBuilder);
389+
}
375390
if (functionScore == null) {
376-
searchRequestBuilder.setQuery(queryBuilder);
391+
searchRequestBuilder.setQuery(query);
377392
} else {
378-
searchRequestBuilder.setQuery(QueryBuilders.functionScoreQuery(queryBuilder, ScoreFunctionBuilders.scriptFunction(functionScore)));
393+
searchRequestBuilder.setQuery(QueryBuilders.functionScoreQuery(query, ScoreFunctionBuilders.scriptFunction(functionScore)));
379394
}
380395
searchRequestBuilder.setTypes(getTypes());
381396
if (classes != null && classes.length > 0) {
@@ -401,7 +416,32 @@ public SearchResponse search(int from, int size) {
401416
} else {
402417
searchRequestBuilder.addSort(SortBuilders.fieldSort(prefixField));
403418
}
404-
return searchRequestBuilder.execute().actionGet();
419+
return searchRequestBuilder;
420+
}
421+
422+
/**
423+
* Generate a SearchRequestBuilder based on the query helper configuration.
424+
*
425+
* @param from The start index of the search (for pagination).
426+
* @param size The maximum number of elements to return.
427+
* @param queryBuilderAdapter adapter.
428+
* @return an ElasticSearch SearchRequestBuilder that can be used for more advanced configuraiton.
429+
*/
430+
public SearchRequestBuilder generate(int from, int size, QueryBuilderAdapter queryBuilderAdapter) {
431+
SearchRequestBuilder searchRequestBuilder = generate(queryBuilderAdapter);
432+
searchRequestBuilder.setSize(size).setFrom(from);
433+
return searchRequestBuilder;
434+
}
435+
436+
/**
437+
* Generate a SearchRequestBuilder based on the query helper configuration.
438+
*
439+
* @param from The start index of the search (for pagination).
440+
* @param size The maximum number of elements to return.
441+
* @return an ElasticSearch SearchRequestBuilder that can be used for more advanced configuraiton.
442+
*/
443+
public SearchRequestBuilder generate(int from, int size) {
444+
return generate(from, size, null);
405445
}
406446

407447
private void addFetchContext(SearchRequestBuilder searchRequestBuilder) {

elasticsearch-mapping/src/test/java/org/elasticsearch/mapping/MappingBuilderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void testSimpleClassMapping() throws IntrospectionException, JsonGenerati
2525
mappingBuilder.initialize("org.elasticsearch.mapping.model");
2626
String personMapping = mappingBuilder.getMapping(Person.class);
2727
Assert.assertEquals(
28-
"{\"person\":{\"_type\":{\"index\":\"not_analyzed\",\"store\":false},\"_id\":{\"index\":\"no\",\"store\":false,\"path\":\"id\"},\"_source\":{\"enabled\":true},\"properties\":{\"address\":{\"properties\":{\"city\":{\"include_in_all\":false,\"index\":\"not_analyzed\",\"store\":false,\"boost\":1.0,\"term_vector\":\"no\",\"type\":\"string\"}},\"type\":\"nested\"},\"lastname\":{\"include_in_all\":true,\"index\":\"analyzed\",\"store\":false,\"boost\":1.0,\"term_vector\":\"no\",\"type\":\"string\"},\"firstname\":{\"include_in_all\":false,\"index\":\"no\",\"store\":false,\"boost\":1.0,\"term_vector\":\"no\",\"type\":\"string\"}},\"_all\":{\"enabled\":true,\"store\":false,\"analyzer\":\"simple\"}}}",
28+
"{\"person\":{\"_type\":{\"index\":\"not_analyzed\",\"store\":false},\"_source\":{\"enabled\":true},\"_id\":{\"path\":\"id\",\"index\":\"no\",\"store\":false},\"_all\":{\"analyzer\":\"simple\",\"store\":false,\"enabled\":true},\"properties\":{\"firstname\":{\"include_in_all\":false,\"term_vector\":\"no\",\"index\":\"no\",\"boost\":1.0,\"store\":false,\"type\":\"string\"},\"address\":{\"type\":\"nested\",\"properties\":{\"city\":{\"include_in_all\":false,\"term_vector\":\"no\",\"index\":\"not_analyzed\",\"boost\":1.0,\"store\":false,\"type\":\"string\"}}},\"alienScore\":{\"include_in_all\":false,\"precision_step\":4,\"index\":\"not_analyzed\",\"boost\":1.0,\"store\":false,\"ignore_malformed\":false,\"type\":\"long\"},\"lastname\":{\"include_in_all\":true,\"term_vector\":\"no\",\"index\":\"analyzed\",\"boost\":1.0,\"store\":false,\"type\":\"string\"}}}}",
2929
personMapping);
3030
}
31-
}
31+
}

elasticsearch-mapping/src/test/java/org/elasticsearch/mapping/model/Person.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package org.elasticsearch.mapping.model;
22

3-
import org.elasticsearch.annotation.ESAll;
4-
import org.elasticsearch.annotation.ESObject;
5-
import org.elasticsearch.annotation.Id;
6-
import org.elasticsearch.annotation.NestedObject;
7-
import org.elasticsearch.annotation.StringField;
3+
import org.elasticsearch.annotation.*;
84
import org.elasticsearch.annotation.query.TermFilter;
95
import org.elasticsearch.mapping.IndexType;
106

@@ -25,6 +21,17 @@ public class Person {
2521
@NestedObject
2622
private Address address;
2723

24+
@NumberField(index = IndexType.not_analyzed, includeInAll = false)
25+
private long alienScore = 1;
26+
27+
public long getAlienScore() {
28+
return alienScore;
29+
}
30+
31+
public void setAlienScore(long alienScore) {
32+
this.alienScore = alienScore;
33+
}
34+
2835
public String getId() {
2936
return id;
3037
}

pom.xml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>fr.lucboutier.elasticsearch</groupId>
55
<artifactId>elasticsearch-mapping-parent</artifactId>
6-
<version>1.3.0</version>
6+
<version>1.4.0</version>
77
<packaging>pom</packaging>
88

99
<name>Elastic search mapping parent</name>
1010
<description>An object mapping framework for Elastic Search.</description>
1111

1212
<properties>
13-
<elasticsearch.version>1.4.0</elasticsearch.version>
13+
<elasticsearch.version>1.7.0</elasticsearch.version>
1414
<jackson.version>2.0.4</jackson.version>
1515
<spring.version>3.1.0.RELEASE</spring.version>
1616
<junit.version>4.10</junit.version>
@@ -31,6 +31,11 @@
3131
<artifactId>elasticsearch</artifactId>
3232
<version>${elasticsearch.version}</version>
3333
</dependency>
34+
<dependency>
35+
<groupId>org.apache.lucene</groupId>
36+
<artifactId>lucene-expressions</artifactId>
37+
<version>4.10.4</version>
38+
</dependency>
3439
<dependency>
3540
<groupId>com.fasterxml.jackson.core</groupId>
3641
<artifactId>jackson-databind</artifactId>

0 commit comments

Comments
 (0)