mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-29 15:22:11 +00:00
DATAES-54 - upgraded to elasticsearch 1.0
This commit is contained in:
parent
ea50046f45
commit
1352c9f45b
2
pom.xml
2
pom.xml
@ -24,7 +24,7 @@
|
||||
|
||||
<commonscollections>3.2.1</commonscollections>
|
||||
<commonslang>2.6</commonslang>
|
||||
<elasticsearch>0.90.11</elasticsearch>
|
||||
<elasticsearch>1.0.0</elasticsearch>
|
||||
<springdata.commons>1.7.0.RC1</springdata.commons>
|
||||
|
||||
</properties>
|
||||
|
@ -23,6 +23,7 @@ import java.util.LinkedList;
|
||||
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;
|
||||
@ -117,18 +118,20 @@ class CriteriaQueryProcessor {
|
||||
}
|
||||
QueryBuilder query = null;
|
||||
|
||||
String searchText = StringUtils.toString(value);
|
||||
|
||||
switch (key) {
|
||||
case EQUALS:
|
||||
query = fieldQuery(fieldName, value);
|
||||
query = queryString(searchText).field(fieldName);
|
||||
break;
|
||||
case CONTAINS:
|
||||
query = fieldQuery(fieldName, "*" + value + "*").analyzeWildcard(true);
|
||||
query = queryString("*" + searchText + "*").field(fieldName).analyzeWildcard(true);
|
||||
break;
|
||||
case STARTS_WITH:
|
||||
query = fieldQuery(fieldName, value + "*").analyzeWildcard(true);
|
||||
query = queryString(searchText + "*").field(fieldName).analyzeWildcard(true);
|
||||
break;
|
||||
case ENDS_WITH:
|
||||
query = fieldQuery(fieldName, "*" + value).analyzeWildcard(true);
|
||||
query = queryString("*" + searchText).field(fieldName).analyzeWildcard(true);
|
||||
break;
|
||||
case EXPRESSION:
|
||||
query = queryString((String) value).field(fieldName);
|
||||
@ -144,7 +147,7 @@ class CriteriaQueryProcessor {
|
||||
query = boolQuery();
|
||||
Iterable<Object> collection = (Iterable<Object>) value;
|
||||
for (Object item : collection) {
|
||||
((BoolQueryBuilder) query).should(fieldQuery(fieldName, item));
|
||||
((BoolQueryBuilder) query).should(queryString((String) item).field(fieldName));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -152,14 +155,6 @@ class CriteriaQueryProcessor {
|
||||
return query;
|
||||
}
|
||||
|
||||
private QueryBuilder buildNegationQuery(String fieldName, Iterator<Criteria.CriteriaEntry> it) {
|
||||
BoolQueryBuilder notQuery = boolQuery();
|
||||
while (it.hasNext()) {
|
||||
notQuery.mustNot(fieldQuery(fieldName, it.next().getValue()));
|
||||
}
|
||||
return notQuery;
|
||||
}
|
||||
|
||||
private void addBoost(QueryBuilder query, float boost) {
|
||||
if (Float.isNaN(boost)) {
|
||||
return;
|
||||
|
@ -193,7 +193,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
|
||||
public <T> List<String> queryForIds(SearchQuery query) {
|
||||
SearchRequestBuilder request = prepareSearch(query).setQuery(query.getQuery()).setNoFields();
|
||||
if (query.getFilter() != null) {
|
||||
request.setFilter(query.getFilter());
|
||||
request.setPostFilter(query.getFilter());
|
||||
}
|
||||
SearchResponse response = request.execute().actionGet();
|
||||
return extractIds(response);
|
||||
@ -216,7 +216,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
|
||||
}
|
||||
|
||||
if (elasticsearchFilter != null)
|
||||
searchRequestBuilder.setFilter(elasticsearchFilter);
|
||||
searchRequestBuilder.setPostFilter(elasticsearchFilter);
|
||||
|
||||
SearchResponse response = searchRequestBuilder
|
||||
.execute().actionGet();
|
||||
@ -318,7 +318,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
|
||||
ImmutableOpenMap<String, MappingMetaData> mappings = client.admin().cluster().prepareState().execute().actionGet()
|
||||
.getState().metaData().index(index).mappings();
|
||||
if (mappings.containsKey(type)) {
|
||||
client.admin().indices().deleteMapping(new DeleteMappingRequest(index).type(type)).actionGet();
|
||||
client.admin().indices().deleteMapping(new DeleteMappingRequest(index).types(type)).actionGet();
|
||||
}
|
||||
}
|
||||
|
||||
@ -360,7 +360,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
|
||||
.setSize(searchQuery.getPageable().getPageSize());
|
||||
|
||||
if (searchQuery.getFilter() != null) {
|
||||
requestBuilder.setFilter(searchQuery.getFilter());
|
||||
requestBuilder.setPostFilter(searchQuery.getFilter());
|
||||
}
|
||||
|
||||
if (noFields) {
|
||||
@ -448,7 +448,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
|
||||
|
||||
private SearchResponse doSearch(SearchRequestBuilder searchRequest, SearchQuery searchQuery) {
|
||||
if (searchQuery.getFilter() != null) {
|
||||
searchRequest.setFilter(searchQuery.getFilter());
|
||||
searchRequest.setPostFilter(searchQuery.getFilter());
|
||||
}
|
||||
|
||||
if (searchQuery.getElasticsearchSort() != null) {
|
||||
@ -616,9 +616,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
|
||||
@Override
|
||||
public Set<String> queryForAlias(String indexName) {
|
||||
ClusterStateRequest clusterStateRequest = Requests.clusterStateRequest()
|
||||
.filterRoutingTable(true)
|
||||
.filterNodes(true)
|
||||
.filteredIndices(indexName);
|
||||
.routingTable(true).nodes(true).indices(indexName);
|
||||
Iterator<String> iterator = client.admin().cluster().state(clusterStateRequest).actionGet().getState().getMetaData().aliases().keysIt();
|
||||
return newHashSet(iterator);
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ public class Criteria {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new CriterSimpleFieldia for the Filed with provided name
|
||||
* Creates a new Criteria with provided field name
|
||||
*
|
||||
* @param fieldname
|
||||
*/
|
||||
@ -394,14 +394,14 @@ public class Criteria {
|
||||
/**
|
||||
* Creates new CriteriaEntry for bounding box created from points
|
||||
*
|
||||
* @param topLeftPoint left top corner of bounding box
|
||||
* @param bottomRightPoint right bottom corner of bounding box
|
||||
* @param topLeftGeohash left top corner of bounding box as geohash
|
||||
* @param bottomRightGeohash right bottom corner of bounding box as geohash
|
||||
* @return Criteria the chaind criteria with the new 'boundedBy' criteria included.
|
||||
*/
|
||||
public Criteria boundedBy(String topLeftPoint, String bottomRightPoint) {
|
||||
Assert.isTrue(StringUtils.isNotBlank(topLeftPoint), "topLeftPoint must not be empty");
|
||||
Assert.isTrue(StringUtils.isNotBlank(bottomRightPoint), "bottomRightPoint must not be empty");
|
||||
filterCriteria.add(new CriteriaEntry(OperationKey.BBOX, new Object[]{topLeftPoint, bottomRightPoint}));
|
||||
public Criteria boundedBy(String topLeftGeohash, String bottomRightGeohash) {
|
||||
Assert.isTrue(StringUtils.isNotBlank(topLeftGeohash), "topLeftGeohash must not be empty");
|
||||
Assert.isTrue(StringUtils.isNotBlank(bottomRightGeohash), "bottomRightGeohash must not be empty");
|
||||
filterCriteria.add(new CriteriaEntry(OperationKey.BBOX, new Object[]{topLeftGeohash, bottomRightGeohash}));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.elasticsearch.ElasticSearchException;
|
||||
import org.elasticsearch.ElasticsearchException;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -70,7 +70,7 @@ public abstract class AbstractElasticsearchRepository<T, ID extends Serializable
|
||||
try {
|
||||
createIndex();
|
||||
putMapping();
|
||||
} catch (ElasticSearchException exception) {
|
||||
} catch (ElasticsearchException exception) {
|
||||
LOGGER.error("failed to load elasticsearch nodes : " + exception.getDetailedMessage());
|
||||
}
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ public class ElasticsearchTemplateParentChildTests {
|
||||
elasticsearchTemplate.refresh(ChildEntity.class, true);
|
||||
|
||||
// find all parents that have the first child
|
||||
QueryBuilder query = hasChildQuery(ParentEntity.CHILD_TYPE, QueryBuilders.fieldQuery("name", child1name));
|
||||
QueryBuilder query = hasChildQuery(ParentEntity.CHILD_TYPE, QueryBuilders.termQuery("name", child1name.toLowerCase()));
|
||||
List<ParentEntity> parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class);
|
||||
|
||||
// we're expecting only the first parent as result
|
||||
@ -97,7 +97,7 @@ public class ElasticsearchTemplateParentChildTests {
|
||||
elasticsearchTemplate.refresh(ChildEntity.class, true);
|
||||
|
||||
// find all parents that have the first child using topChildren Query
|
||||
QueryBuilder query = topChildrenQuery(ParentEntity.CHILD_TYPE, QueryBuilders.fieldQuery("name", child1name));
|
||||
QueryBuilder query = topChildrenQuery(ParentEntity.CHILD_TYPE, QueryBuilders.termQuery("name", child1name.toLowerCase()));
|
||||
List<ParentEntity> parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class);
|
||||
|
||||
// we're expecting only the first parent as result
|
||||
|
@ -21,11 +21,7 @@ import static org.elasticsearch.index.query.QueryBuilders.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.*;
|
||||
|
||||
import org.elasticsearch.action.index.IndexRequest;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
@ -195,7 +191,7 @@ public class ElasticsearchTemplateTests {
|
||||
elasticsearchTemplate.delete(INDEX_NAME, TYPE_NAME, documentId);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class, true);
|
||||
// then
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
|
||||
assertThat(sampleEntities.getTotalElements(), equalTo(0L));
|
||||
}
|
||||
@ -218,7 +214,7 @@ public class ElasticsearchTemplateTests {
|
||||
elasticsearchTemplate.delete(SampleEntity.class, documentId);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class, true);
|
||||
// then
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
|
||||
assertThat(sampleEntities.getTotalElements(), equalTo(0L));
|
||||
}
|
||||
@ -239,10 +235,10 @@ public class ElasticsearchTemplateTests {
|
||||
elasticsearchTemplate.index(indexQuery);
|
||||
// when
|
||||
DeleteQuery deleteQuery = new DeleteQuery();
|
||||
deleteQuery.setQuery(fieldQuery("id", documentId));
|
||||
deleteQuery.setQuery(termQuery("id", documentId));
|
||||
elasticsearchTemplate.delete(deleteQuery, SampleEntity.class);
|
||||
// then
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
|
||||
assertThat(sampleEntities.getTotalElements(), equalTo(0L));
|
||||
}
|
||||
@ -415,7 +411,7 @@ public class ElasticsearchTemplateTests {
|
||||
elasticsearchTemplate.index(indexQuery);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class, true);
|
||||
|
||||
StringQuery stringQuery = new StringQuery(fieldQuery("id", documentId).toString());
|
||||
StringQuery stringQuery = new StringQuery(termQuery("id", documentId).toString());
|
||||
// when
|
||||
SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(stringQuery, SampleEntity.class);
|
||||
// then
|
||||
@ -898,12 +894,12 @@ public class ElasticsearchTemplateTests {
|
||||
elasticsearchTemplate.refresh(SampleEntity.class, true);
|
||||
// when
|
||||
DeleteQuery deleteQuery = new DeleteQuery();
|
||||
deleteQuery.setQuery(fieldQuery("id", documentId));
|
||||
deleteQuery.setQuery(termQuery("id", documentId));
|
||||
deleteQuery.setIndex(INDEX_NAME);
|
||||
deleteQuery.setType(TYPE_NAME);
|
||||
elasticsearchTemplate.delete(deleteQuery);
|
||||
// then
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
|
||||
assertThat(sampleEntities.getTotalElements(), equalTo(0L));
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import static org.junit.Assert.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.elasticsearch.common.geo.GeoHashUtils;
|
||||
import org.elasticsearch.index.query.FilterBuilders;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@ -178,7 +179,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
public void shouldFindAllMarkersForNativeSearchQuery() {
|
||||
//Given
|
||||
loadAnnotationBaseEntities();
|
||||
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withFilter(FilterBuilders.geoBoundingBoxFilter("additionalLocation").topLeft("52, -1").bottomRight("50,1"));
|
||||
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withFilter(FilterBuilders.geoBoundingBoxFilter("additionalLocation").topLeft(52, -1).bottomRight(50, 1));
|
||||
//When
|
||||
List<AuthorMarkerAnnotatedEntity> geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(queryBuilder.build(), AuthorMarkerAnnotatedEntity.class);
|
||||
//Then
|
||||
@ -202,11 +203,11 @@ public class ElasticsearchTemplateGeoTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFindAuthorMarkersInBoxForGivenCriteriaQueryUsingString() {
|
||||
public void shouldFindAuthorMarkersInBoxForGivenCriteriaQueryUsingGeohash() {
|
||||
//given
|
||||
loadClassBaseEntities();
|
||||
CriteriaQuery geoLocationCriteriaQuery3 = new CriteriaQuery(
|
||||
new Criteria("location").boundedBy("53.5171d, 0", "49.5171d, 0.2062d"));
|
||||
new Criteria("location").boundedBy(GeoHashUtils.encode(53.5171d, 0), GeoHashUtils.encode(49.5171d, 0.2062d)));
|
||||
//when
|
||||
List<AuthorMarkerEntity> geoAuthorsForGeoCriteria3 = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery3, AuthorMarkerEntity.class);
|
||||
|
||||
|
@ -94,10 +94,11 @@ public class CustomMethodRepositoryTests {
|
||||
SampleEntity sampleEntity = new SampleEntity();
|
||||
sampleEntity.setId(documentId);
|
||||
sampleEntity.setType("test");
|
||||
sampleEntity.setMessage("customQuery");
|
||||
String searchTerm = "customQuery";
|
||||
sampleEntity.setMessage(searchTerm);
|
||||
repository.save(sampleEntity);
|
||||
// when
|
||||
Page<SampleEntity> page = repository.findByMessage("customQuery", new PageRequest(0, 10));
|
||||
Page<SampleEntity> page = repository.findByMessage(searchTerm.toLowerCase(), new PageRequest(0, 10));
|
||||
// then
|
||||
assertThat(page, is(notNullValue()));
|
||||
assertThat(page.getTotalElements(), is(greaterThanOrEqualTo(1L)));
|
||||
@ -418,8 +419,7 @@ public class CustomMethodRepositoryTests {
|
||||
repository.save(sampleEntity);
|
||||
}
|
||||
// when
|
||||
Page<SampleEntity> pageResult = repository.findByMessage("message", new PageRequest(0, 23, new Sort(new Sort.Order(
|
||||
Sort.Direction.ASC, "message"))));
|
||||
Page<SampleEntity> pageResult = repository.findByMessage("message", new PageRequest(0, 23));
|
||||
// then
|
||||
assertThat(pageResult.getTotalElements(), is(equalTo(30L)));
|
||||
assertThat(pageResult.getContent().size(), is(equalTo(23)));
|
||||
|
@ -33,10 +33,10 @@ public interface SampleCustomMethodRepository extends ElasticsearchRepository<Sa
|
||||
|
||||
Page<SampleEntity> findByTypeNot(String type, Pageable pageable);
|
||||
|
||||
@Query("{\"bool\" : {\"must\" : {\"field\" : {\"message\" : \"?0\"}}}}")
|
||||
@Query("{\"bool\" : {\"must\" : {\"term\" : {\"message\" : \"?0\"}}}}")
|
||||
Page<SampleEntity> findByMessage(String message, Pageable pageable);
|
||||
|
||||
@Query("{\"bool\" : {\"must\" : {\"field\" : {\"message\" : \"?0\"}}}}")
|
||||
@Query("{\"bool\" : {\"must\" : {\"term\" : {\"message\" : \"?0\"}}}}")
|
||||
List<SampleEntity> findByMessage(String message);
|
||||
|
||||
Page<SampleEntity> findByAvailable(boolean available, Pageable pageable);
|
||||
|
@ -249,7 +249,7 @@ public class SimpleElasticsearchRepositoryTests {
|
||||
// when
|
||||
repository.save(sampleEntities);
|
||||
// then
|
||||
Page<SampleEntity> entities = repository.search(fieldQuery("id", documentId), new PageRequest(0, 50));
|
||||
Page<SampleEntity> entities = repository.search(termQuery("id", documentId), new PageRequest(0, 50));
|
||||
assertNotNull(entities);
|
||||
}
|
||||
|
||||
@ -280,7 +280,7 @@ public class SimpleElasticsearchRepositoryTests {
|
||||
sampleEntity.setVersion(System.currentTimeMillis());
|
||||
repository.save(sampleEntity);
|
||||
// when
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SampleEntity> sampleEntities = repository.search(searchQuery);
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements(), equalTo(1L));
|
||||
@ -308,7 +308,7 @@ public class SimpleElasticsearchRepositoryTests {
|
||||
// when
|
||||
repository.delete(sampleEntity);
|
||||
// then
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SampleEntity> sampleEntities = repository.search(searchQuery);
|
||||
assertThat(sampleEntities.getTotalElements(), equalTo(0L));
|
||||
}
|
||||
@ -331,7 +331,7 @@ public class SimpleElasticsearchRepositoryTests {
|
||||
repository.save(sampleEntity2);
|
||||
|
||||
// when
|
||||
Iterable<SampleEntity> sampleEntities = repository.search(fieldQuery("id", documentId1));
|
||||
Iterable<SampleEntity> sampleEntities = repository.search(termQuery("id", documentId1));
|
||||
// then
|
||||
assertNotNull("sample entities cant be null..", sampleEntities);
|
||||
}
|
||||
@ -371,7 +371,7 @@ public class SimpleElasticsearchRepositoryTests {
|
||||
// when
|
||||
repository.index(sampleEntity);
|
||||
// then
|
||||
Page<SampleEntity> entities = repository.search(fieldQuery("id", documentId), new PageRequest(0, 50));
|
||||
Page<SampleEntity> entities = repository.search(termQuery("id", documentId), new PageRequest(0, 50));
|
||||
assertThat(entities.getTotalElements(), equalTo(1L));
|
||||
}
|
||||
|
||||
|
@ -12,9 +12,9 @@ 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="4.6.1",
|
||||
org.joda.time.*;version="${jodatime:[=.=.=,+1.0.0)}",
|
||||
org.slf4j.*;version="${slf4j:[=.=.=,+1.0.0)}",
|
||||
org.springframework.*;version="${spring:[=.=.=.=,+1.0.0)}",
|
||||
org.springframework.data.*;version="${springdata.commons:[=.=.=.=,+1.0.0)}",
|
||||
org.w3c.*;version="0.0.0"
|
||||
|
Loading…
x
Reference in New Issue
Block a user