committed by
GitHub
parent
79d75f814c
commit
2cd18178e3
@@ -45,6 +45,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType;
|
||||
import org.springframework.data.elasticsearch.annotations.InnerField;
|
||||
import org.springframework.data.elasticsearch.annotations.MultiField;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.GetQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
|
||||
@@ -122,14 +123,15 @@ public class NestedObjectTests {
|
||||
indexQueries.add(indexQuery1);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
IndexCoordinates index = IndexCoordinates.of("test-index-person").withTypes( "user");
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(Person.class);
|
||||
|
||||
QueryBuilder builder = nestedQuery("car",
|
||||
boolQuery().must(termQuery("car.name", "saturn")).must(termQuery("car.model", "imprezza")), ScoreMode.None);
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
|
||||
List<Person> persons = elasticsearchTemplate.queryForList(searchQuery, Person.class);
|
||||
List<Person> persons = elasticsearchTemplate.queryForList(searchQuery, Person.class, index);
|
||||
|
||||
assertThat(persons).hasSize(1);
|
||||
}
|
||||
@@ -141,14 +143,15 @@ public class NestedObjectTests {
|
||||
List<IndexQuery> indexQueries = createPerson();
|
||||
|
||||
// when
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries,
|
||||
IndexCoordinates.of("test-index-person-multiple-level-nested").withTypes( "user"));
|
||||
elasticsearchTemplate.refresh(PersonMultipleLevelNested.class);
|
||||
|
||||
// then
|
||||
GetQuery getQuery = new GetQuery();
|
||||
getQuery.setId("1");
|
||||
PersonMultipleLevelNested personIndexed = elasticsearchTemplate.queryForObject(getQuery,
|
||||
PersonMultipleLevelNested.class);
|
||||
PersonMultipleLevelNested personIndexed = elasticsearchTemplate.get(getQuery, PersonMultipleLevelNested.class,
|
||||
IndexCoordinates.of("test-index-person-multiple-level-nested").withTypes( "user"));
|
||||
assertThat(personIndexed).isNotNull();
|
||||
}
|
||||
|
||||
@@ -159,7 +162,8 @@ public class NestedObjectTests {
|
||||
List<IndexQuery> indexQueries = createPerson();
|
||||
|
||||
// when
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries,
|
||||
IndexCoordinates.of("test-index-person-multiple-level-nested").withTypes( "user"));
|
||||
|
||||
// then
|
||||
Map<String, Object> mapping = elasticsearchTemplate.getMapping(PersonMultipleLevelNested.class);
|
||||
@@ -178,7 +182,9 @@ public class NestedObjectTests {
|
||||
List<IndexQuery> indexQueries = createPerson();
|
||||
|
||||
// when
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
IndexCoordinates index = IndexCoordinates.of("test-index-person-multiple-level-nested").withTypes( "user");
|
||||
elasticsearchTemplate.bulkIndex(indexQueries,
|
||||
index);
|
||||
elasticsearchTemplate.refresh(PersonMultipleLevelNested.class);
|
||||
|
||||
// then
|
||||
@@ -189,7 +195,7 @@ public class NestedObjectTests {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
|
||||
|
||||
Page<PersonMultipleLevelNested> personIndexed = elasticsearchTemplate.queryForPage(searchQuery,
|
||||
PersonMultipleLevelNested.class);
|
||||
PersonMultipleLevelNested.class, index);
|
||||
assertThat(personIndexed).isNotNull();
|
||||
assertThat(personIndexed.getTotalElements()).isEqualTo(1);
|
||||
assertThat(personIndexed.getContent().get(0).getId()).isEqualTo("1");
|
||||
@@ -317,14 +323,15 @@ public class NestedObjectTests {
|
||||
indexQueries.add(indexQuery1);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
IndexCoordinates index = IndexCoordinates.of("test-index-person").withTypes( "user");
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(Person.class);
|
||||
|
||||
// when
|
||||
QueryBuilder builder = nestedQuery("books", boolQuery().must(termQuery("books.name", "java")), ScoreMode.None);
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
|
||||
List<Person> persons = elasticsearchTemplate.queryForList(searchQuery, Person.class);
|
||||
List<Person> persons = elasticsearchTemplate.queryForList(searchQuery, Person.class, index);
|
||||
|
||||
// then
|
||||
assertThat(persons).hasSize(1);
|
||||
@@ -365,13 +372,14 @@ public class NestedObjectTests {
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
// when
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
IndexCoordinates index = IndexCoordinates.of("test-index-book-nested-objects").withTypes( "book");
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(Book.class);
|
||||
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
|
||||
.withQuery(nestedQuery("buckets", termQuery("buckets.1", "test3"), ScoreMode.None)).build();
|
||||
Page<Book> books = elasticsearchTemplate.queryForPage(searchQuery, Book.class);
|
||||
Page<Book> books = elasticsearchTemplate.queryForPage(searchQuery, Book.class, index);
|
||||
|
||||
assertThat(books.getContent()).hasSize(1);
|
||||
assertThat(books.getContent().get(0).getId()).isEqualTo(book2.getId());
|
||||
|
||||
@@ -22,16 +22,9 @@ import static org.springframework.data.elasticsearch.annotations.FieldType.*;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.Object;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.elasticsearch.ElasticsearchStatusException;
|
||||
import org.elasticsearch.action.index.IndexRequest;
|
||||
import org.elasticsearch.action.update.UpdateRequest;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
@@ -41,7 +34,6 @@ import org.springframework.data.elasticsearch.core.query.UpdateQueryBuilder;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
/**
|
||||
* @author Rizwan Idrees
|
||||
@@ -56,7 +48,6 @@ import org.springframework.test.util.ReflectionTestUtils;
|
||||
* @author Sascha Woo
|
||||
* @author Don Wellington
|
||||
* @author Peter-Josef Meisch
|
||||
* @author Massimiliano Poggi
|
||||
*/
|
||||
@SpringIntegrationTest
|
||||
@ContextConfiguration(classes = { ElasticsearchRestTemplateConfiguration.class })
|
||||
@@ -68,65 +59,12 @@ public class ElasticsearchRestTemplateTests extends ElasticsearchTemplateTests {
|
||||
// when
|
||||
IndexRequest indexRequest = new IndexRequest();
|
||||
indexRequest.source("{}", XContentType.JSON);
|
||||
UpdateQuery updateQuery = new UpdateQueryBuilder().withId(randomNumeric(5)).withClass(SampleEntity.class)
|
||||
.withIndexRequest(indexRequest).build();
|
||||
UpdateQuery updateQuery = new UpdateQueryBuilder().withId(randomNumeric(5)).withIndexRequest(indexRequest).build();
|
||||
assertThatThrownBy(() -> {
|
||||
elasticsearchTemplate.update(updateQuery);
|
||||
elasticsearchTemplate.update(updateQuery, index);
|
||||
}).isInstanceOf(ElasticsearchStatusException.class);
|
||||
}
|
||||
|
||||
@Test // DATAES-227
|
||||
@Override
|
||||
public void shouldUseUpsertOnUpdate() throws IOException {
|
||||
|
||||
// given
|
||||
Map<String, Object> doc = new HashMap<>();
|
||||
doc.put("id", "1");
|
||||
doc.put("message", "test");
|
||||
|
||||
UpdateRequest updateRequest = new UpdateRequest() //
|
||||
.doc(doc) //
|
||||
.upsert(doc);
|
||||
|
||||
UpdateQuery updateQuery = new UpdateQueryBuilder() //
|
||||
.withClass(SampleEntity.class) //
|
||||
.withId("1") //
|
||||
.withUpdateRequest(updateRequest).build();
|
||||
|
||||
// when
|
||||
UpdateRequest request = (UpdateRequest) ReflectionTestUtils //
|
||||
.invokeMethod(elasticsearchTemplate, "prepareUpdate", updateQuery);
|
||||
|
||||
// then
|
||||
assertThat(request).isNotNull();
|
||||
assertThat(request.upsertRequest()).isNotNull();
|
||||
}
|
||||
|
||||
@Test // DATAES-693
|
||||
public void shouldReturnSourceWhenRequested() throws IOException {
|
||||
// given
|
||||
Map<String, Object> doc = new HashMap<>();
|
||||
doc.put("id", "1");
|
||||
doc.put("message", "test");
|
||||
|
||||
UpdateRequest updateRequest = new UpdateRequest()
|
||||
.doc(doc)
|
||||
.fetchSource(FetchSourceContext.FETCH_SOURCE);
|
||||
|
||||
UpdateQuery updateQuery = new UpdateQueryBuilder() //
|
||||
.withClass(SampleEntity.class) //
|
||||
.withId("1") //
|
||||
.withUpdateRequest(updateRequest).build();
|
||||
|
||||
// when
|
||||
UpdateRequest request = (UpdateRequest) ReflectionTestUtils //
|
||||
.invokeMethod(elasticsearchTemplate, "prepareUpdate", updateQuery);
|
||||
|
||||
// then
|
||||
assertThat(request).isNotNull();
|
||||
assertThat(request.fetchSource()).isEqualTo(FetchSourceContext.FETCH_SOURCE);
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@Document(indexName = "test-index-sample-core-rest-template", type = "test-type", shards = 1, replicas = 0,
|
||||
|
||||
@@ -83,7 +83,7 @@ public class ElasticsearchTemplateParentChildTests {
|
||||
// find all parents that have the first child
|
||||
QueryBuilder query = hasChildQuery(ParentEntity.CHILD_TYPE,
|
||||
QueryBuilders.termQuery("name", child1name.toLowerCase()), ScoreMode.None);
|
||||
List<ParentEntity> parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class);
|
||||
List<ParentEntity> parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class, IndexCoordinates.of(ParentEntity.INDEX));
|
||||
|
||||
// we're expecting only the first parent as result
|
||||
assertThat(parents).hasSize(1);
|
||||
@@ -105,7 +105,7 @@ public class ElasticsearchTemplateParentChildTests {
|
||||
XContentBuilder builder;
|
||||
builder = jsonBuilder().startObject().field("name", newChildName).endObject();
|
||||
updateRequest.doc(builder);
|
||||
UpdateResponse response = update(updateRequest);
|
||||
UpdateResponse response = update(updateRequest, IndexCoordinates.of(ParentEntity.INDEX).withTypes( ParentEntity.CHILD_TYPE));
|
||||
|
||||
assertThat(response.getShardInfo().getSuccessful()).isEqualTo(1);
|
||||
}
|
||||
@@ -124,7 +124,7 @@ public class ElasticsearchTemplateParentChildTests {
|
||||
XContentBuilder builder;
|
||||
builder = jsonBuilder().startObject().field("name", newChildName).endObject();
|
||||
updateRequest.doc(builder);
|
||||
update(updateRequest);
|
||||
update(updateRequest, IndexCoordinates.of(ParentEntity.INDEX).withTypes( ParentEntity.CHILD_TYPE));
|
||||
}
|
||||
|
||||
@Ignore(value = "DATAES-421")
|
||||
@@ -142,7 +142,7 @@ public class ElasticsearchTemplateParentChildTests {
|
||||
builder = jsonBuilder().startObject().field("name", newChildName).endObject();
|
||||
updateRequest.doc(builder);
|
||||
updateRequest.doc().routing(parent.getId());
|
||||
update(updateRequest);
|
||||
update(updateRequest, IndexCoordinates.of(ParentEntity.INDEX).withTypes( ParentEntity.CHILD_TYPE));
|
||||
}
|
||||
|
||||
private ParentEntity index(String parentId, String name) {
|
||||
@@ -151,7 +151,7 @@ public class ElasticsearchTemplateParentChildTests {
|
||||
IndexQuery index = new IndexQuery();
|
||||
index.setId(parent.getId());
|
||||
index.setObject(parent);
|
||||
elasticsearchTemplate.index(index);
|
||||
elasticsearchTemplate.index(index, IndexCoordinates.of(ParentEntity.INDEX).withTypes( ParentEntity.PARENT_TYPE));
|
||||
|
||||
return parent;
|
||||
}
|
||||
@@ -163,19 +163,17 @@ public class ElasticsearchTemplateParentChildTests {
|
||||
index.setId(child.getId());
|
||||
index.setObject(child);
|
||||
index.setParentId(child.getParentId());
|
||||
elasticsearchTemplate.index(index);
|
||||
elasticsearchTemplate.index(index, IndexCoordinates.of(ParentEntity.INDEX).withTypes( ParentEntity.CHILD_TYPE));
|
||||
|
||||
return child;
|
||||
}
|
||||
|
||||
private UpdateResponse update(UpdateRequest updateRequest) {
|
||||
private UpdateResponse update(UpdateRequest updateRequest, IndexCoordinates index) {
|
||||
|
||||
UpdateQuery update = new UpdateQuery();
|
||||
update.setId(updateRequest.id());
|
||||
update.setType(updateRequest.type());
|
||||
update.setIndexName(updateRequest.index());
|
||||
update.setUpdateRequest(updateRequest);
|
||||
return elasticsearchTemplate.update(update);
|
||||
return elasticsearchTemplate.update(update, index);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -46,10 +46,9 @@ public class ElasticsearchTransportTemplateTests extends ElasticsearchTemplateTe
|
||||
// when
|
||||
IndexRequest indexRequest = new IndexRequest();
|
||||
indexRequest.source("{}", XContentType.JSON);
|
||||
UpdateQuery updateQuery = new UpdateQueryBuilder().withId(randomNumeric(5)).withClass(SampleEntity.class)
|
||||
.withIndexRequest(indexRequest).build();
|
||||
UpdateQuery updateQuery = new UpdateQueryBuilder().withId(randomNumeric(5)).withIndexRequest(indexRequest).build();
|
||||
assertThatThrownBy(() -> {
|
||||
elasticsearchTemplate.update(updateQuery);
|
||||
elasticsearchTemplate.update(updateQuery, index);
|
||||
}).isInstanceOf(DocumentMissingException.class);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 2019 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
|
||||
*
|
||||
* https://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;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* @author Peter-Josef Meisch
|
||||
*/
|
||||
class IndexCoordinatesTest {
|
||||
|
||||
@Test
|
||||
void cannotBeInitializedWithNullIndexName() {
|
||||
assertThatThrownBy(() -> {
|
||||
IndexCoordinates.of(null);
|
||||
}).isInstanceOf(IllegalArgumentException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void cannotBeInitializedWithNullIndexNames() {
|
||||
assertThatThrownBy(() -> {
|
||||
IndexCoordinates.of((String[]) null);
|
||||
}).isInstanceOf(IllegalArgumentException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void cannotBeInitializedWithEmptyIndexNames() {
|
||||
assertThatThrownBy(() -> {
|
||||
IndexCoordinates.of(new String[] {});
|
||||
}).isInstanceOf(IllegalArgumentException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldHaveEmptyTypesWhenNotSet() {
|
||||
IndexCoordinates indexCoordinates = IndexCoordinates.of("test");
|
||||
|
||||
assertThat(indexCoordinates.getTypeNames()).isEmpty();
|
||||
}
|
||||
}
|
||||
@@ -53,6 +53,7 @@ import org.springframework.test.context.ContextConfiguration;
|
||||
@ContextConfiguration(classes = { ElasticsearchTemplateConfiguration.class })
|
||||
public class LogEntityTests {
|
||||
|
||||
private final IndexCoordinates index = IndexCoordinates.of("test-index-log-core").withTypes( "test-log-type");
|
||||
@Autowired private ElasticsearchTemplate template;
|
||||
|
||||
@BeforeEach
|
||||
@@ -73,7 +74,7 @@ public class LogEntityTests {
|
||||
IndexQuery indexQuery4 = new LogEntityBuilder("4").action("update").date(dateFormatter.parse("2013-10-19 18:04"))
|
||||
.code(2).ip("10.10.10.4").buildIndex();
|
||||
|
||||
template.bulkIndex(Arrays.asList(indexQuery1, indexQuery2, indexQuery3, indexQuery4));
|
||||
template.bulkIndex(Arrays.asList(indexQuery1, indexQuery2, indexQuery3, indexQuery4), index);
|
||||
template.refresh(LogEntity.class);
|
||||
}
|
||||
|
||||
@@ -82,7 +83,7 @@ public class LogEntityTests {
|
||||
|
||||
// when
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("ip", "10.10.10.1")).build();
|
||||
List<LogEntity> entities = template.queryForList(searchQuery, LogEntity.class);
|
||||
List<LogEntity> entities = template.queryForList(searchQuery, LogEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(entities).isNotNull().hasSize(1);
|
||||
@@ -95,7 +96,7 @@ public class LogEntityTests {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("ip", "10.10.10")).build();
|
||||
|
||||
assertThatThrownBy(() -> {
|
||||
List<LogEntity> entities = template.queryForList(searchQuery, LogEntity.class);
|
||||
List<LogEntity> entities = template.queryForList(searchQuery, LogEntity.class, index);
|
||||
}).isInstanceOf(SearchPhaseExecutionException.class);
|
||||
}
|
||||
|
||||
@@ -105,7 +106,7 @@ public class LogEntityTests {
|
||||
// when
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
|
||||
.withQuery(rangeQuery("ip").from("10.10.10.1").to("10.10.10.3")).build();
|
||||
List<LogEntity> entities = template.queryForList(searchQuery, LogEntity.class);
|
||||
List<LogEntity> entities = template.queryForList(searchQuery, LogEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(entities).isNotNull().hasSize(3);
|
||||
|
||||
@@ -61,9 +61,7 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
|
||||
import org.springframework.data.elasticsearch.core.query.StringQuery;
|
||||
import org.springframework.data.elasticsearch.junit.junit4.ElasticsearchVersion;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
@@ -76,7 +74,6 @@ import org.springframework.util.StringUtils;
|
||||
* @author Martin Choraine
|
||||
*/
|
||||
@SpringIntegrationTest
|
||||
@ContextConfiguration(classes = { ElasticsearchRestTemplateConfiguration.class })
|
||||
public class ReactiveElasticsearchTemplateTests {
|
||||
|
||||
static final String DEFAULT_INDEX = "reactive-template-test-index";
|
||||
@@ -139,8 +136,9 @@ public class ReactiveElasticsearchTemplateTests {
|
||||
|
||||
restTemplate.refresh(SampleEntity.class);
|
||||
|
||||
List<SampleEntity> result = restTemplate
|
||||
.queryForList(new CriteriaQuery(Criteria.where("message").is(sampleEntity.getMessage())), SampleEntity.class);
|
||||
List<SampleEntity> result = restTemplate.queryForList(
|
||||
new CriteriaQuery(Criteria.where("message").is(sampleEntity.getMessage())), SampleEntity.class,
|
||||
IndexCoordinates.of(DEFAULT_INDEX));
|
||||
assertThat(result).hasSize(1);
|
||||
}
|
||||
|
||||
@@ -171,8 +169,8 @@ public class ReactiveElasticsearchTemplateTests {
|
||||
.expectNextCount(1)//
|
||||
.verifyComplete();
|
||||
|
||||
restTemplate.refresh(DEFAULT_INDEX);
|
||||
restTemplate.refresh(ALTERNATE_INDEX);
|
||||
restTemplate.refresh(IndexCoordinates.of(DEFAULT_INDEX));
|
||||
restTemplate.refresh(IndexCoordinates.of(ALTERNATE_INDEX));
|
||||
|
||||
assertThat(TestUtils.documentWithId(sampleEntity.getId()).existsIn(DEFAULT_INDEX)).isFalse();
|
||||
assertThat(TestUtils.documentWithId(sampleEntity.getId()).existsIn(ALTERNATE_INDEX)).isTrue();
|
||||
@@ -192,8 +190,9 @@ public class ReactiveElasticsearchTemplateTests {
|
||||
|
||||
@Test // DATAES-504
|
||||
public void insertShouldErrorOnNullEntity() {
|
||||
assertThatThrownBy(() -> template.save(null)).isInstanceOf(IllegalArgumentException.class);
|
||||
|
||||
assertThatThrownBy(() -> {
|
||||
template.save(null);
|
||||
}).isInstanceOf(IllegalArgumentException.class);
|
||||
}
|
||||
|
||||
@Test // DATAES-519
|
||||
@@ -245,7 +244,9 @@ public class ReactiveElasticsearchTemplateTests {
|
||||
|
||||
@Test // DATAES-504
|
||||
public void findByIdShouldErrorForNullId() {
|
||||
assertThatThrownBy(() -> template.findById(null, SampleEntity.class)).isInstanceOf(IllegalArgumentException.class);
|
||||
assertThatThrownBy(() -> {
|
||||
template.findById(null, SampleEntity.class);
|
||||
}).isInstanceOf(IllegalArgumentException.class);
|
||||
}
|
||||
|
||||
@Test // DATAES-504
|
||||
@@ -254,13 +255,12 @@ public class ReactiveElasticsearchTemplateTests {
|
||||
SampleEntity sampleEntity = randomEntity("some message");
|
||||
|
||||
IndexQuery indexQuery = getIndexQuery(sampleEntity);
|
||||
indexQuery.setIndexName(ALTERNATE_INDEX);
|
||||
|
||||
restTemplate.index(indexQuery);
|
||||
restTemplate.index(indexQuery, IndexCoordinates.of(ALTERNATE_INDEX).withTypes( "test-type"));
|
||||
restTemplate.refresh(SampleEntity.class);
|
||||
|
||||
restTemplate.refresh(DEFAULT_INDEX);
|
||||
restTemplate.refresh(ALTERNATE_INDEX);
|
||||
restTemplate.refresh(IndexCoordinates.of(DEFAULT_INDEX));
|
||||
restTemplate.refresh(IndexCoordinates.of(ALTERNATE_INDEX));
|
||||
|
||||
template.findById(sampleEntity.getId(), SampleEntity.class) //
|
||||
.as(StepVerifier::create) //
|
||||
@@ -586,8 +586,8 @@ public class ReactiveElasticsearchTemplateTests {
|
||||
.as(StepVerifier::create)//
|
||||
.verifyComplete();
|
||||
|
||||
restTemplate.refresh(thisIndex);
|
||||
restTemplate.refresh(thatIndex);
|
||||
restTemplate.refresh(IndexCoordinates.of(thisIndex));
|
||||
restTemplate.refresh(IndexCoordinates.of(thatIndex));
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() //
|
||||
.withQuery(termQuery("message", "test")) //
|
||||
@@ -616,8 +616,8 @@ public class ReactiveElasticsearchTemplateTests {
|
||||
.as(StepVerifier::create)//
|
||||
.verifyComplete();
|
||||
|
||||
restTemplate.refresh(thisIndex);
|
||||
restTemplate.refresh(thatIndex);
|
||||
restTemplate.refresh(IndexCoordinates.of(thisIndex));
|
||||
restTemplate.refresh(IndexCoordinates.of(thatIndex));
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() //
|
||||
.withQuery(termQuery("message", "negative")) //
|
||||
@@ -725,10 +725,12 @@ public class ReactiveElasticsearchTemplateTests {
|
||||
|
||||
private void index(SampleEntity... entities) {
|
||||
|
||||
IndexCoordinates indexCoordinates = IndexCoordinates.of(DEFAULT_INDEX).withTypes( "test-type");
|
||||
|
||||
if (entities.length == 1) {
|
||||
restTemplate.index(getIndexQuery(entities[0]));
|
||||
restTemplate.index(getIndexQuery(entities[0]), indexCoordinates);
|
||||
} else {
|
||||
restTemplate.bulkIndex(getIndexQueries(entities));
|
||||
restTemplate.bulkIndex(getIndexQueries(entities), indexCoordinates);
|
||||
}
|
||||
|
||||
restTemplate.refresh(SampleEntity.class);
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.springframework.data.elasticsearch.annotations.Field;
|
||||
import org.springframework.data.elasticsearch.annotations.InnerField;
|
||||
import org.springframework.data.elasticsearch.annotations.MultiField;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.ResultsExtractor;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
|
||||
@@ -89,10 +90,11 @@ public class ElasticsearchTemplateAggregationTests {
|
||||
.addAuthor(RIZWAN_IDREES).addPublishedYear(YEAR_2002).addPublishedYear(YEAR_2001).addPublishedYear(YEAR_2000)
|
||||
.score(40).buildIndex();
|
||||
|
||||
elasticsearchTemplate.index(article1);
|
||||
elasticsearchTemplate.index(article2);
|
||||
elasticsearchTemplate.index(article3);
|
||||
elasticsearchTemplate.index(article4);
|
||||
IndexCoordinates index = IndexCoordinates.of(INDEX_NAME).withTypes( "article");
|
||||
elasticsearchTemplate.index(article1, index);
|
||||
elasticsearchTemplate.index(article2, index);
|
||||
elasticsearchTemplate.index(article3, index);
|
||||
elasticsearchTemplate.index(article4, index);
|
||||
elasticsearchTemplate.refresh(ArticleEntity.class);
|
||||
}
|
||||
|
||||
@@ -118,7 +120,7 @@ public class ElasticsearchTemplateAggregationTests {
|
||||
public Aggregations extract(SearchResponse response) {
|
||||
return response.getAggregations();
|
||||
}
|
||||
});
|
||||
}, null, IndexCoordinates.of(INDEX_NAME).withTypes("article"));
|
||||
// then
|
||||
assertThat(aggregations).isNotNull();
|
||||
assertThat(aggregations.asMap().get("subjects")).isNotNull();
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.CompletionField;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
@@ -66,7 +67,7 @@ public class ElasticsearchTemplateCompletionTests {
|
||||
indexQueries.add(new CompletionEntityBuilder("4").name("Artur Konczak").suggest(new String[] { "Artur", "Konczak" })
|
||||
.buildIndex());
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, IndexCoordinates.of("test-index-core-completion").withTypes( "completion-type"));
|
||||
elasticsearchTemplate.refresh(CompletionEntity.class);
|
||||
}
|
||||
|
||||
@@ -88,7 +89,8 @@ public class ElasticsearchTemplateCompletionTests {
|
||||
indexQueries.add(new AnnotatedCompletionEntityBuilder("4").name("Artur Konczak")
|
||||
.suggest(new String[] { "Artur", "Konczak" }).buildIndex());
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries,
|
||||
IndexCoordinates.of("test-index-annotated-completion").withTypes( "annotated-completion-type"));
|
||||
elasticsearchTemplate.refresh(AnnotatedCompletionEntity.class);
|
||||
}
|
||||
|
||||
@@ -106,7 +108,8 @@ public class ElasticsearchTemplateCompletionTests {
|
||||
indexQueries.add(new AnnotatedCompletionEntityBuilder("4").name("Mewes Kochheim4")
|
||||
.suggest(new String[] { "Mewes Kochheim4" }, Integer.MAX_VALUE).buildIndex());
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries,
|
||||
IndexCoordinates.of("test-index-annotated-completion").withTypes( "annotated-completion-type"));
|
||||
elasticsearchTemplate.refresh(AnnotatedCompletionEntity.class);
|
||||
}
|
||||
|
||||
@@ -132,7 +135,8 @@ public class ElasticsearchTemplateCompletionTests {
|
||||
|
||||
// when
|
||||
SearchResponse suggestResponse = elasticsearchTemplate.suggest(
|
||||
new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder), CompletionEntity.class);
|
||||
new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
|
||||
IndexCoordinates.of("test-index-core-completion").withTypes( "completion-type"));
|
||||
CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
|
||||
List<CompletionSuggestion.Entry.Option> options = completionSuggestion.getEntries().get(0).getOptions();
|
||||
|
||||
@@ -152,7 +156,8 @@ public class ElasticsearchTemplateCompletionTests {
|
||||
|
||||
// when
|
||||
SearchResponse suggestResponse = elasticsearchTemplate.suggest(
|
||||
new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder), CompletionEntity.class);
|
||||
new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
|
||||
IndexCoordinates.of("test-index-core-completion").withTypes( "completion-type"));
|
||||
CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
|
||||
List<CompletionSuggestion.Entry.Option> options = completionSuggestion.getEntries().get(0).getOptions();
|
||||
|
||||
@@ -173,7 +178,7 @@ public class ElasticsearchTemplateCompletionTests {
|
||||
// when
|
||||
SearchResponse suggestResponse = elasticsearchTemplate.suggest(
|
||||
new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
|
||||
AnnotatedCompletionEntity.class);
|
||||
IndexCoordinates.of("test-index-annotated-completion").withTypes( "annotated-completion-type"));
|
||||
CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
|
||||
List<CompletionSuggestion.Entry.Option> options = completionSuggestion.getEntries().get(0).getOptions();
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.springframework.data.elasticsearch.annotations.CompletionContext;
|
||||
import org.springframework.data.elasticsearch.annotations.CompletionField;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
@@ -86,7 +87,8 @@ public class ElasticsearchTemplateCompletionWithContextsTests {
|
||||
indexQueries.add(new ContextCompletionEntityBuilder("4").name("Artur Konczak")
|
||||
.suggest(new String[] { "Artur", "Konczak" }, context4).buildIndex());
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries,
|
||||
IndexCoordinates.of("test-index-context-completion").withTypes( "context-completion-type"));
|
||||
elasticsearchTemplate.refresh(ContextCompletionEntity.class);
|
||||
}
|
||||
|
||||
@@ -123,7 +125,7 @@ public class ElasticsearchTemplateCompletionWithContextsTests {
|
||||
// when
|
||||
SearchResponse suggestResponse = elasticsearchTemplate.suggest(
|
||||
new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
|
||||
ContextCompletionEntity.class);
|
||||
IndexCoordinates.of("test-index-context-completion").withTypes( "context-completion-type"));
|
||||
assertThat(suggestResponse.getSuggest()).isNotNull();
|
||||
CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
|
||||
List<CompletionSuggestion.Entry.Option> options = completionSuggestion.getEntries().get(0).getOptions();
|
||||
@@ -155,7 +157,7 @@ public class ElasticsearchTemplateCompletionWithContextsTests {
|
||||
// when
|
||||
SearchResponse suggestResponse = elasticsearchTemplate.suggest(
|
||||
new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
|
||||
ContextCompletionEntity.class);
|
||||
IndexCoordinates.of("test-index-context-completion").withTypes( "context-completion-type"));
|
||||
assertThat(suggestResponse.getSuggest()).isNotNull();
|
||||
CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
|
||||
List<CompletionSuggestion.Entry.Option> options = completionSuggestion.getEntries().get(0).getOptions();
|
||||
@@ -187,7 +189,7 @@ public class ElasticsearchTemplateCompletionWithContextsTests {
|
||||
// when
|
||||
SearchResponse suggestResponse = elasticsearchTemplate.suggest(
|
||||
new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
|
||||
ContextCompletionEntity.class);
|
||||
IndexCoordinates.of("test-index-context-completion").withTypes( "context-completion-type"));
|
||||
assertThat(suggestResponse.getSuggest()).isNotNull();
|
||||
CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
|
||||
List<CompletionSuggestion.Entry.Option> options = completionSuggestion.getEntries().get(0).getOptions();
|
||||
|
||||
@@ -1,695 +0,0 @@
|
||||
/*
|
||||
* Copyright 2013-2019 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
|
||||
*
|
||||
* https://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.facet;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.elasticsearch.index.query.QueryBuilders.*;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.Field;
|
||||
import org.springframework.data.elasticsearch.annotations.FieldType;
|
||||
import org.springframework.data.elasticsearch.annotations.InnerField;
|
||||
import org.springframework.data.elasticsearch.annotations.MultiField;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.FacetedPage;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.facet.request.HistogramFacetRequestBuilder;
|
||||
import org.springframework.data.elasticsearch.core.facet.request.NativeFacetRequest;
|
||||
import org.springframework.data.elasticsearch.core.facet.request.RangeFacetRequestBuilder;
|
||||
import org.springframework.data.elasticsearch.core.facet.request.StatisticalFacetRequestBuilder;
|
||||
import org.springframework.data.elasticsearch.core.facet.request.TermFacetRequestBuilder;
|
||||
import org.springframework.data.elasticsearch.core.facet.result.HistogramResult;
|
||||
import org.springframework.data.elasticsearch.core.facet.result.IntervalUnit;
|
||||
import org.springframework.data.elasticsearch.core.facet.result.Range;
|
||||
import org.springframework.data.elasticsearch.core.facet.result.RangeResult;
|
||||
import org.springframework.data.elasticsearch.core.facet.result.StatisticalResult;
|
||||
import org.springframework.data.elasticsearch.core.facet.result.Term;
|
||||
import org.springframework.data.elasticsearch.core.facet.result.TermResult;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
import org.springframework.data.elasticsearch.utils.IndexInitializer;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
||||
/**
|
||||
* @author Rizwan Idrees
|
||||
* @author Mohsin Husen
|
||||
* @author Jonathan Yan
|
||||
* @author Artur Konczak
|
||||
* @author Peter-Josef Meisch
|
||||
*/
|
||||
@SpringIntegrationTest
|
||||
@ContextConfiguration(classes = { ElasticsearchTemplateConfiguration.class })
|
||||
public class ElasticsearchTemplateFacetTests {
|
||||
|
||||
private static final String RIZWAN_IDREES = "Rizwan Idrees";
|
||||
private static final String MOHSIN_HUSEN = "Mohsin Husen";
|
||||
private static final String JONATHAN_YAN = "Jonathan Yan";
|
||||
private static final String ARTUR_KONCZAK = "Artur Konczak";
|
||||
private static final int YEAR_2002 = 2002;
|
||||
private static final int YEAR_2001 = 2001;
|
||||
private static final int YEAR_2000 = 2000;
|
||||
private static final String PUBLISHED_YEARS = "publishedYears";
|
||||
|
||||
@Autowired private ElasticsearchTemplate elasticsearchTemplate;
|
||||
|
||||
@BeforeEach
|
||||
public void before() {
|
||||
|
||||
IndexInitializer.init(elasticsearchTemplate, ArticleEntity.class);
|
||||
|
||||
IndexQuery article1 = new ArticleEntityBuilder("1").title("article four").addAuthor(RIZWAN_IDREES)
|
||||
.addAuthor(ARTUR_KONCZAK).addAuthor(MOHSIN_HUSEN).addAuthor(JONATHAN_YAN).score(10).buildIndex();
|
||||
IndexQuery article2 = new ArticleEntityBuilder("2").title("article three").addAuthor(RIZWAN_IDREES)
|
||||
.addAuthor(ARTUR_KONCZAK).addAuthor(MOHSIN_HUSEN).addPublishedYear(YEAR_2000).score(20).buildIndex();
|
||||
IndexQuery article3 = new ArticleEntityBuilder("3").title("article two").addAuthor(RIZWAN_IDREES)
|
||||
.addAuthor(ARTUR_KONCZAK).addPublishedYear(YEAR_2001).addPublishedYear(YEAR_2000).score(30).buildIndex();
|
||||
IndexQuery article4 = new ArticleEntityBuilder("4").title("article one").addAuthor(RIZWAN_IDREES)
|
||||
.addPublishedYear(YEAR_2002).addPublishedYear(YEAR_2001).addPublishedYear(YEAR_2000).score(40).buildIndex();
|
||||
|
||||
elasticsearchTemplate.index(article1);
|
||||
elasticsearchTemplate.index(article2);
|
||||
elasticsearchTemplate.index(article3);
|
||||
elasticsearchTemplate.index(article4);
|
||||
elasticsearchTemplate.refresh(ArticleEntity.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnFacetedAuthorsForGivenQueryWithDefaultOrder() {
|
||||
|
||||
// given
|
||||
String facetName = "fauthors";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).fields("authors.untouched").build()).build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm()).isEqualTo(RIZWAN_IDREES);
|
||||
assertThat(term.getCount()).isEqualTo(4);
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm()).isEqualTo(ARTUR_KONCZAK);
|
||||
assertThat(term.getCount()).isEqualTo(3);
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm()).isEqualTo(MOHSIN_HUSEN);
|
||||
assertThat(term.getCount()).isEqualTo(2);
|
||||
|
||||
term = facet.getTerms().get(3);
|
||||
assertThat(term.getTerm()).isEqualTo(JONATHAN_YAN);
|
||||
assertThat(term.getCount()).isEqualTo(1);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(4);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnFacetedAuthorsForGivenFilteredQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "fauthors";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched").build())
|
||||
.build();
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm()).isEqualTo(RIZWAN_IDREES);
|
||||
assertThat(term.getCount()).isEqualTo(4);
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm()).isEqualTo(ARTUR_KONCZAK);
|
||||
assertThat(term.getCount()).isEqualTo(3);
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm()).isEqualTo(MOHSIN_HUSEN);
|
||||
assertThat(term.getCount()).isEqualTo(2);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(4);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldExcludeTermsFromFacetedAuthorsForGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "fauthors";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched")
|
||||
.excludeTerms(RIZWAN_IDREES, ARTUR_KONCZAK).build())
|
||||
.build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
|
||||
assertThat(facet.getTerms()).hasSize(2);
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm()).isEqualTo(MOHSIN_HUSEN);
|
||||
assertThat(term.getCount()).isEqualTo(2);
|
||||
|
||||
Term term1 = facet.getTerms().get(1);
|
||||
assertThat(term1.getTerm()).isEqualTo(JONATHAN_YAN);
|
||||
assertThat(term1.getCount()).isEqualTo(1);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(2);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnFacetedAuthorsForGivenQueryOrderedByTerm() {
|
||||
|
||||
// given
|
||||
String facetName = "fauthors";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).fields("authors.untouched").ascTerm().build()).build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm()).isEqualTo(ARTUR_KONCZAK);
|
||||
assertThat(term.getCount()).isEqualTo(3);
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm()).isEqualTo(JONATHAN_YAN);
|
||||
assertThat(term.getCount()).isEqualTo(1);
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm()).isEqualTo(MOHSIN_HUSEN);
|
||||
assertThat(term.getCount()).isEqualTo(2);
|
||||
|
||||
term = facet.getTerms().get(3);
|
||||
assertThat(term.getTerm()).isEqualTo(RIZWAN_IDREES);
|
||||
assertThat(term.getCount()).isEqualTo(4);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(4);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnFacetedAuthorsForGivenQueryOrderedByCountAsc() {
|
||||
|
||||
// given
|
||||
String facetName = "fauthors";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).fields("authors.untouched").ascCount().build()).build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm()).isEqualTo(JONATHAN_YAN);
|
||||
assertThat(term.getCount()).isEqualTo(1);
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm()).isEqualTo(MOHSIN_HUSEN);
|
||||
assertThat(term.getCount()).isEqualTo(2);
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm()).isEqualTo(ARTUR_KONCZAK);
|
||||
assertThat(term.getCount()).isEqualTo(3);
|
||||
|
||||
term = facet.getTerms().get(3);
|
||||
assertThat(term.getTerm()).isEqualTo(RIZWAN_IDREES);
|
||||
assertThat(term.getCount()).isEqualTo(4);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(4);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnFacetedYearsForGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "fyears";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).fields("publishedYears").descCount().build()).build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
assertThat(facet.getTerms()).hasSize(3);
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm()).isEqualTo(Long.toString(YEAR_2000));
|
||||
assertThat(term.getCount()).isEqualTo(3);
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm()).isEqualTo(Long.toString(YEAR_2001));
|
||||
assertThat(term.getCount()).isEqualTo(2);
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm()).isEqualTo(Long.toString(YEAR_2002));
|
||||
assertThat(term.getCount()).isEqualTo(1);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(3);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnExistingFacetedYearsForGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "fyears";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(
|
||||
new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("publishedYears").descCount().build())
|
||||
.build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
assertThat(facet.getTerms()).hasSize(3);
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm()).isEqualTo(Long.toString(YEAR_2000));
|
||||
assertThat(term.getCount()).isEqualTo(3);
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm()).isEqualTo(Long.toString(YEAR_2001));
|
||||
assertThat(term.getCount()).isEqualTo(2);
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm()).isEqualTo(Long.toString(YEAR_2002));
|
||||
assertThat(term.getCount()).isEqualTo(1);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(3);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldThrowExeptionsForMultiFieldFacet() {
|
||||
|
||||
// given
|
||||
String facetName = "fyears";
|
||||
assertThatThrownBy(() -> {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(
|
||||
new TermFacetRequestBuilder(facetName).fields("publishedYears", "authors.untouched").ascTerm().build())
|
||||
.build();
|
||||
}).isInstanceOf(IllegalArgumentException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnFacetedYearsAndFacetedAuthorsForGivenQuery() {
|
||||
|
||||
// given
|
||||
String numberFacetName = "fAuthors";
|
||||
String stringFacetName = "fyears";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new TermFacetRequestBuilder(numberFacetName).fields("publishedYears").ascTerm().build())
|
||||
.withFacet(new TermFacetRequestBuilder(stringFacetName).fields("authors.untouched").ascTerm().build()).build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult numberFacet = (TermResult) result.getFacet(numberFacetName);
|
||||
assertThat(numberFacet.getTerms()).hasSize(3);
|
||||
|
||||
Term numberTerm = numberFacet.getTerms().get(0);
|
||||
assertThat(numberTerm.getTerm()).isEqualTo(Long.toString(YEAR_2000));
|
||||
assertThat(numberTerm.getCount()).isEqualTo(3);
|
||||
|
||||
numberTerm = numberFacet.getTerms().get(1);
|
||||
assertThat(numberTerm.getTerm()).isEqualTo(Long.toString(YEAR_2001));
|
||||
assertThat(numberTerm.getCount()).isEqualTo(2);
|
||||
|
||||
numberTerm = numberFacet.getTerms().get(2);
|
||||
assertThat(numberTerm.getTerm()).isEqualTo(Long.toString(YEAR_2002));
|
||||
assertThat(numberTerm.getCount()).isEqualTo(1);
|
||||
|
||||
TermResult stringFacet = (TermResult) result.getFacet(stringFacetName);
|
||||
Term stringTerm = stringFacet.getTerms().get(0);
|
||||
assertThat(stringTerm.getTerm()).isEqualTo(ARTUR_KONCZAK);
|
||||
assertThat(stringTerm.getCount()).isEqualTo(3);
|
||||
|
||||
stringTerm = stringFacet.getTerms().get(1);
|
||||
assertThat(stringTerm.getTerm()).isEqualTo(JONATHAN_YAN);
|
||||
assertThat(stringTerm.getCount()).isEqualTo(1);
|
||||
|
||||
stringTerm = stringFacet.getTerms().get(2);
|
||||
assertThat(stringTerm.getTerm()).isEqualTo(MOHSIN_HUSEN);
|
||||
assertThat(stringTerm.getCount()).isEqualTo(2);
|
||||
|
||||
stringTerm = stringFacet.getTerms().get(3);
|
||||
assertThat(stringTerm.getTerm()).isEqualTo(RIZWAN_IDREES);
|
||||
assertThat(stringTerm.getCount()).isEqualTo(4);
|
||||
|
||||
assertThat(stringFacet.getTotal()).isEqualTo(4);
|
||||
assertThat(stringFacet.getOther()).isEqualTo(0);
|
||||
assertThat(stringFacet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldThrowExceptionForNativeFacets() {
|
||||
|
||||
// given
|
||||
String facetName = "fyears";
|
||||
assertThatThrownBy(() -> {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new NativeFacetRequest()).build();
|
||||
}).isInstanceOf(UnsupportedOperationException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFilterResultByRegexForGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "regex_authors";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withFacet(
|
||||
new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched").regex("Art.*").build())
|
||||
.build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
|
||||
assertThat(facet.getTerms()).hasSize(1);
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm()).isEqualTo(ARTUR_KONCZAK);
|
||||
assertThat(term.getCount()).isEqualTo(3);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(1);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnAllTermsForGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "all_authors";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(
|
||||
new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched").allTerms().build())
|
||||
.build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
|
||||
assertThat(facet.getTerms()).hasSize(4);
|
||||
|
||||
assertThat(facet.getTotal()).isEqualTo(4);
|
||||
assertThat(facet.getOther()).isEqualTo(0);
|
||||
assertThat(facet.getMissing()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnRangeFacetForGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "rangeYears";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new RangeFacetRequestBuilder(facetName).field(PUBLISHED_YEARS).to(YEAR_2000)
|
||||
.range(YEAR_2000, YEAR_2002).from(YEAR_2002).build())
|
||||
.build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
RangeResult facet = (RangeResult) result.getFacet(facetName);
|
||||
assertThat(facet.getRanges()).hasSize(3);
|
||||
|
||||
Range range = facet.getRanges().get(0);
|
||||
assertThat(range.getFrom()).isEqualTo(Double.NEGATIVE_INFINITY);
|
||||
assertThat(range.getTo()).isEqualTo((double) YEAR_2000);
|
||||
assertThat(range.getCount()).isEqualTo(0);
|
||||
assertThat(range.getTotal()).isEqualTo(0.0);
|
||||
|
||||
range = facet.getRanges().get(1);
|
||||
assertThat(range.getFrom()).isEqualTo((double) YEAR_2000);
|
||||
assertThat(range.getTo()).isEqualTo((double) YEAR_2002);
|
||||
assertThat(range.getCount()).isEqualTo(3);
|
||||
assertThat(range.getTotal()).isEqualTo(12004.0);
|
||||
|
||||
range = facet.getRanges().get(2);
|
||||
assertThat(range.getFrom()).isEqualTo((double) YEAR_2002);
|
||||
assertThat(range.getTo()).isEqualTo(Double.POSITIVE_INFINITY);
|
||||
assertThat(range.getCount()).isEqualTo(1);
|
||||
assertThat(range.getTotal()).isEqualTo(6003.0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnKeyValueRangeFacetForStringValuesInGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "rangeScoreOverYears";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new RangeFacetRequestBuilder(facetName).fields(PUBLISHED_YEARS, "score").to(YEAR_2000)
|
||||
.range(YEAR_2000, YEAR_2002).from(YEAR_2002).build())
|
||||
.build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
RangeResult facet = (RangeResult) result.getFacet(facetName);
|
||||
assertThat(facet.getRanges()).hasSize(3);
|
||||
|
||||
Range range = facet.getRanges().get(0);
|
||||
assertThat(range.getFrom()).isEqualTo(Double.NEGATIVE_INFINITY);
|
||||
assertThat(range.getTo()).isEqualTo((double) YEAR_2000);
|
||||
assertThat(range.getCount()).isEqualTo(0);
|
||||
assertThat(range.getTotal()).isEqualTo(0.0);
|
||||
|
||||
range = facet.getRanges().get(1);
|
||||
assertThat(range.getFrom()).isEqualTo((double) YEAR_2000);
|
||||
assertThat(range.getTo()).isEqualTo((double) YEAR_2002);
|
||||
assertThat(range.getCount()).isEqualTo(3);
|
||||
assertThat(range.getTotal()).isEqualTo(90.0);
|
||||
|
||||
range = facet.getRanges().get(2);
|
||||
assertThat(range.getFrom()).isEqualTo((double) YEAR_2002);
|
||||
assertThat(range.getTo()).isEqualTo(Double.POSITIVE_INFINITY);
|
||||
assertThat(range.getCount()).isEqualTo(1);
|
||||
assertThat(range.getTotal()).isEqualTo(40.0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnStatisticalFacetForGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "statPublishedYear";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new StatisticalFacetRequestBuilder(facetName).field(PUBLISHED_YEARS).build()).build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
StatisticalResult facet = (StatisticalResult) result.getFacet(facetName);
|
||||
assertThat(facet.getCount()).isEqualTo(6);
|
||||
assertThat(facet.getMax()).isEqualTo(2002.0);
|
||||
assertThat(facet.getMin()).isEqualTo(2000.0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnHistogramFacetForGivenQuery() {
|
||||
|
||||
// given
|
||||
String facetName = "numberPublicationPerYear";
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new HistogramFacetRequestBuilder(facetName).field(PUBLISHED_YEARS).interval(1).build()).build();
|
||||
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
// then
|
||||
assertThat(result.getNumberOfElements()).isEqualTo(4);
|
||||
|
||||
HistogramResult facet = (HistogramResult) result.getFacet(facetName);
|
||||
assertThat(facet.getIntervalUnit()).hasSize(3);
|
||||
|
||||
IntervalUnit unit = facet.getIntervalUnit().get(0);
|
||||
assertThat(unit.getKey()).isEqualTo(Long.valueOf(YEAR_2000));
|
||||
assertThat(unit.getCount()).isEqualTo(3);
|
||||
|
||||
unit = facet.getIntervalUnit().get(1);
|
||||
assertThat(unit.getKey()).isEqualTo(Long.valueOf(YEAR_2001));
|
||||
assertThat(unit.getCount()).isEqualTo(2);
|
||||
|
||||
unit = facet.getIntervalUnit().get(2);
|
||||
assertThat(unit.getKey()).isEqualTo(Long.valueOf(YEAR_2002));
|
||||
assertThat(unit.getCount()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotThrowExceptionForNoFacets() {
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
AggregatedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
|
||||
assertThat(result.hasFacets()).isEqualTo(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple type to test facets
|
||||
*
|
||||
* @author Artur Konczak
|
||||
* @author Mohsin Husen
|
||||
*/
|
||||
@Data
|
||||
@Document(indexName = "test-index-articles-core-facet", type = "article", shards = 1, replicas = 0,
|
||||
refreshInterval = "-1")
|
||||
static class ArticleEntity {
|
||||
|
||||
@Id private String id;
|
||||
private String title;
|
||||
@Field(type = FieldType.Text, fielddata = true) private String subject;
|
||||
|
||||
@MultiField(mainField = @Field(type = FieldType.Text),
|
||||
otherFields = {
|
||||
@InnerField(suffix = "untouched", type = FieldType.Text, store = true, fielddata = true,
|
||||
analyzer = "keyword"),
|
||||
@InnerField(suffix = "sort", type = FieldType.Text, store = true,
|
||||
analyzer = "keyword") }) private List<String> authors = new ArrayList<>();
|
||||
|
||||
@Field(type = FieldType.Integer, store = true) private List<Integer> publishedYears = new ArrayList<>();
|
||||
|
||||
private int score;
|
||||
|
||||
private ArticleEntity() {
|
||||
|
||||
}
|
||||
|
||||
public ArticleEntity(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple type to test facets
|
||||
*
|
||||
* @author Artur Konczak
|
||||
* @author Mohsin Husen
|
||||
*/
|
||||
static class ArticleEntityBuilder {
|
||||
|
||||
private ArticleEntity result;
|
||||
|
||||
public ArticleEntityBuilder(String id) {
|
||||
result = new ArticleEntity(id);
|
||||
}
|
||||
|
||||
public ArticleEntityBuilder title(String title) {
|
||||
result.setTitle(title);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ArticleEntityBuilder subject(String subject) {
|
||||
result.setSubject(subject);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ArticleEntityBuilder addAuthor(String author) {
|
||||
result.getAuthors().add(author);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ArticleEntityBuilder addPublishedYear(Integer year) {
|
||||
result.getPublishedYears().add(year);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ArticleEntityBuilder score(int score) {
|
||||
result.setScore(score);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ArticleEntity build() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public IndexQuery buildIndex() {
|
||||
IndexQuery indexQuery = new IndexQuery();
|
||||
indexQuery.setId(result.getId());
|
||||
indexQuery.setObject(result);
|
||||
return indexQuery;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -36,6 +36,7 @@ import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.GeoPointField;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.Criteria;
|
||||
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
@@ -61,6 +62,11 @@ import org.springframework.test.context.ContextConfiguration;
|
||||
@ContextConfiguration(classes = { ElasticsearchTemplateConfiguration.class })
|
||||
public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
private final IndexCoordinates locationMarkerIndex = IndexCoordinates.of("test-index-location-marker-core-geo")
|
||||
.withTypes("geo-annotation-point-type");
|
||||
private final IndexCoordinates authorMarkerIndex = IndexCoordinates.of("test-index-author-marker-core-geo")
|
||||
.withTypes("geo-class-point-type");
|
||||
|
||||
@Autowired private ElasticsearchTemplate elasticsearchTemplate;
|
||||
|
||||
@BeforeEach
|
||||
@@ -77,7 +83,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
.add(new AuthorMarkerEntityBuilder("1").name("Franck Marchand").location(45.7806d, 3.0875d).buildIndex());
|
||||
indexQueries.add(new AuthorMarkerEntityBuilder("2").name("Mohsin Husen").location(51.5171d, 0.1062d).buildIndex());
|
||||
indexQueries.add(new AuthorMarkerEntityBuilder("3").name("Rizwan Idrees").location(51.5171d, 0.1062d).buildIndex());
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, authorMarkerIndex);
|
||||
elasticsearchTemplate.refresh(AuthorMarkerEntity.class);
|
||||
}
|
||||
|
||||
@@ -109,7 +115,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
indexQueries.add(buildIndex(location2));
|
||||
indexQueries.add(buildIndex(location3));
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, locationMarkerIndex);
|
||||
elasticsearchTemplate.refresh(LocationMarkerEntity.class);
|
||||
}
|
||||
|
||||
@@ -134,7 +140,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<AuthorMarkerEntity> geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery,
|
||||
AuthorMarkerEntity.class);
|
||||
AuthorMarkerEntity.class, authorMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria).hasSize(1);
|
||||
@@ -151,7 +157,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<AuthorMarkerEntity> geoAuthorsForGeoCriteria2 = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery2,
|
||||
AuthorMarkerEntity.class);
|
||||
AuthorMarkerEntity.class, authorMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria2).hasSize(1);
|
||||
@@ -167,7 +173,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
new Criteria("locationAsString").within(new GeoPoint(51.000000, 0.100000), "1km"));
|
||||
// when
|
||||
List<LocationMarkerEntity> geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery,
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria).hasSize(1);
|
||||
@@ -183,7 +189,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<LocationMarkerEntity> geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery,
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria).hasSize(3);
|
||||
@@ -198,7 +204,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
new Criteria("locationAsArray").within("51.001000, 0.10100", "1km"));
|
||||
// when
|
||||
List<LocationMarkerEntity> geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery,
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria).hasSize(3);
|
||||
@@ -213,7 +219,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<LocationMarkerEntity> geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery,
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria).hasSize(3);
|
||||
@@ -229,7 +235,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<LocationMarkerEntity> geoAuthorsForGeoCriteria = elasticsearchTemplate.queryForList(queryBuilder.build(),
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria).hasSize(3);
|
||||
@@ -245,7 +251,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<AuthorMarkerEntity> geoAuthorsForGeoCriteria3 = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery3,
|
||||
AuthorMarkerEntity.class);
|
||||
AuthorMarkerEntity.class, authorMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria3).hasSize(2);
|
||||
@@ -263,7 +269,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<AuthorMarkerEntity> geoAuthorsForGeoCriteria3 = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery3,
|
||||
AuthorMarkerEntity.class);
|
||||
AuthorMarkerEntity.class, authorMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria3).hasSize(2);
|
||||
@@ -281,7 +287,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<AuthorMarkerEntity> geoAuthorsForGeoCriteria3 = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery3,
|
||||
AuthorMarkerEntity.class);
|
||||
AuthorMarkerEntity.class, authorMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria3).hasSize(2);
|
||||
@@ -299,7 +305,7 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<AuthorMarkerEntity> geoAuthorsForGeoCriteria3 = elasticsearchTemplate.queryForList(geoLocationCriteriaQuery3,
|
||||
AuthorMarkerEntity.class);
|
||||
AuthorMarkerEntity.class, authorMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(geoAuthorsForGeoCriteria3).hasSize(2);
|
||||
@@ -327,17 +333,17 @@ public class ElasticsearchTemplateGeoTests {
|
||||
|
||||
// when
|
||||
List<LocationMarkerEntity> result1 = elasticsearchTemplate.queryForList(location1.build(),
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
List<LocationMarkerEntity> result2 = elasticsearchTemplate.queryForList(location2.build(),
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
List<LocationMarkerEntity> result3 = elasticsearchTemplate.queryForList(location3.build(),
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
List<LocationMarkerEntity> result4 = elasticsearchTemplate.queryForList(location4.build(),
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
List<LocationMarkerEntity> result5 = elasticsearchTemplate.queryForList(location5.build(),
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
List<LocationMarkerEntity> result11 = elasticsearchTemplate.queryForList(location11.build(),
|
||||
LocationMarkerEntity.class);
|
||||
LocationMarkerEntity.class, locationMarkerIndex);
|
||||
|
||||
// then
|
||||
assertThat(result1).hasSize(3);
|
||||
|
||||
@@ -51,6 +51,7 @@ import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.Transient;
|
||||
import org.springframework.data.elasticsearch.annotations.*;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.completion.Completion;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
@@ -139,12 +140,16 @@ public class MappingBuilderTests extends MappingContextBaseTests {
|
||||
double price = 2.34;
|
||||
String id = "abc";
|
||||
|
||||
elasticsearchTemplate
|
||||
.index(buildIndex(StockPrice.builder().id(id).symbol(symbol).price(BigDecimal.valueOf(price)).build()));
|
||||
IndexCoordinates index = IndexCoordinates.of("test-index-stock-mapping-builder").withTypes( "price");
|
||||
elasticsearchTemplate.index(buildIndex(StockPrice.builder() //
|
||||
.id(id) //
|
||||
.symbol(symbol) //
|
||||
.price(BigDecimal.valueOf(price)) //
|
||||
.build()), index);
|
||||
elasticsearchTemplate.refresh(StockPrice.class);
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
List<StockPrice> result = elasticsearchTemplate.queryForList(searchQuery, StockPrice.class);
|
||||
List<StockPrice> result = elasticsearchTemplate.queryForList(searchQuery, StockPrice.class, index);
|
||||
|
||||
// Then
|
||||
assertThat(result).hasSize(1);
|
||||
@@ -186,12 +191,14 @@ public class MappingBuilderTests extends MappingContextBaseTests {
|
||||
Date createdDate = new Date();
|
||||
String message = "msg";
|
||||
String id = "abc";
|
||||
elasticsearchTemplate
|
||||
.index(new SampleInheritedEntityBuilder(id).createdDate(createdDate).message(message).buildIndex());
|
||||
IndexCoordinates index = IndexCoordinates.of("test-index-sample-inherited-mapping-builder").withTypes( "mapping");
|
||||
elasticsearchTemplate.index(
|
||||
new SampleInheritedEntityBuilder(id).createdDate(createdDate).message(message).buildIndex(),
|
||||
index);
|
||||
elasticsearchTemplate.refresh(SampleInheritedEntity.class);
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
List<SampleInheritedEntity> result = elasticsearchTemplate.queryForList(searchQuery, SampleInheritedEntity.class);
|
||||
List<SampleInheritedEntity> result = elasticsearchTemplate.queryForList(searchQuery, SampleInheritedEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(result).hasSize(1);
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.Field;
|
||||
import org.springframework.data.elasticsearch.annotations.Score;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
@@ -54,6 +55,7 @@ import org.springframework.test.context.ContextConfiguration;
|
||||
@ContextConfiguration(classes = { ElasticsearchTemplateConfiguration.class })
|
||||
public class CriteriaQueryTests {
|
||||
|
||||
private final IndexCoordinates index = IndexCoordinates.of("test-index-sample-core-query").withTypes( "test-type");
|
||||
@Autowired private ElasticsearchTemplate elasticsearchTemplate;
|
||||
|
||||
@BeforeEach
|
||||
@@ -78,13 +80,13 @@ public class CriteriaQueryTests {
|
||||
IndexQuery indexQuery = new IndexQuery();
|
||||
indexQuery.setId(documentId);
|
||||
indexQuery.setObject(sampleEntity);
|
||||
elasticsearchTemplate.index(indexQuery);
|
||||
elasticsearchTemplate.index(indexQuery, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(
|
||||
new Criteria("message").contains("test").and("message").contains("some"));
|
||||
|
||||
// when
|
||||
SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
|
||||
SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntity1).isNotNull();
|
||||
@@ -121,13 +123,13 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
|
||||
indexQueries.add(indexQuery2);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(
|
||||
new Criteria("message").contains("some").or("message").contains("test"));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
@@ -152,13 +154,13 @@ public class CriteriaQueryTests {
|
||||
indexQuery.setObject(sampleEntity);
|
||||
indexQueries.add(indexQuery);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria().and(new Criteria("message").contains("some")));
|
||||
|
||||
// when
|
||||
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
@@ -184,12 +186,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery.setObject(sampleEntity);
|
||||
indexQueries.add(indexQuery);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria().or(new Criteria("message").contains("some")));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
@@ -213,12 +215,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery.setObject(sampleEntity);
|
||||
indexQueries.add(indexQuery);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("some message"));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
@@ -255,12 +257,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("some message"));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
@@ -297,13 +299,13 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
Criteria criteria = new Criteria("message").endsWith("end");
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(criteria);
|
||||
|
||||
// when
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
@@ -339,13 +341,13 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
Criteria criteria = new Criteria("message").startsWith("start");
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(criteria);
|
||||
|
||||
// when
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
@@ -381,12 +383,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("contains"));
|
||||
|
||||
// when
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
@@ -422,12 +424,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").expression("+elasticsearch || test"));
|
||||
|
||||
// when
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
@@ -463,13 +465,13 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(
|
||||
new Criteria("message").startsWith("some").endsWith("search").contains("message").is("some message search"));
|
||||
|
||||
// when
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
@@ -505,12 +507,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("foo").not());
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().isNegating()).isTrue();
|
||||
@@ -549,12 +551,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").between(100, 150));
|
||||
|
||||
// when
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
|
||||
SampleEntity sampleEntity = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntity).isNotNull();
|
||||
@@ -591,12 +593,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").between(350, null));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
@@ -634,12 +636,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").between(null, 550));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
@@ -677,12 +679,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").lessThanEqual(750));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
@@ -720,12 +722,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").greaterThanEqual(950));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
@@ -763,12 +765,12 @@ public class CriteriaQueryTests {
|
||||
indexQuery2.setObject(sampleEntity2);
|
||||
indexQueries.add(indexQuery2);
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("foo").boost(1));
|
||||
|
||||
// when
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
@@ -784,14 +786,14 @@ public class CriteriaQueryTests {
|
||||
indexQueries.add(buildIndex(SampleEntity.builder().id("2").message("bc").build()));
|
||||
indexQueries.add(buildIndex(SampleEntity.builder().id("3").message("ac").build()));
|
||||
|
||||
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||
elasticsearchTemplate.bulkIndex(indexQueries, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
|
||||
// when
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(
|
||||
new Criteria("message").contains("a").or(new Criteria("message").contains("b")));
|
||||
criteriaQuery.setMinScore(2.0F);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class);
|
||||
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page.getTotalElements()).isEqualTo(1);
|
||||
@@ -811,13 +813,13 @@ public class CriteriaQueryTests {
|
||||
IndexQuery indexQuery = new IndexQuery();
|
||||
indexQuery.setId(documentId);
|
||||
indexQuery.setObject(sampleEntity);
|
||||
elasticsearchTemplate.index(indexQuery);
|
||||
elasticsearchTemplate.index(indexQuery, index);
|
||||
elasticsearchTemplate.refresh(SampleEntity.class);
|
||||
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("Hello World!"));
|
||||
|
||||
// when
|
||||
SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class);
|
||||
SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntity1).isNotNull();
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.Mapping;
|
||||
import org.springframework.data.elasticsearch.annotations.Setting;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
|
||||
@@ -107,9 +108,11 @@ public class DynamicSettingAndMappingEntityRepositoryTests {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
|
||||
.withQuery(QueryBuilders.termQuery("email", dynamicSettingAndMappingEntity1.getEmail())).build();
|
||||
|
||||
long count = elasticsearchTemplate.count(searchQuery, DynamicSettingAndMappingEntity.class);
|
||||
IndexCoordinates index = IndexCoordinates.of("test-index-dynamic-setting-and-mapping").withTypes( "test-setting-type");
|
||||
long count = elasticsearchTemplate.count(searchQuery, DynamicSettingAndMappingEntity.class,
|
||||
index);
|
||||
List<DynamicSettingAndMappingEntity> entityList = elasticsearchTemplate.queryForList(searchQuery,
|
||||
DynamicSettingAndMappingEntity.class);
|
||||
DynamicSettingAndMappingEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(count).isEqualTo(1L);
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
@@ -70,7 +71,7 @@ public class SpELEntityTests {
|
||||
// then
|
||||
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(QueryBuilders.matchAllQuery());
|
||||
nativeSearchQuery.addIndices("test-index-abz-entity");
|
||||
long count = template.count(nativeSearchQuery);
|
||||
long count = template.count(nativeSearchQuery, IndexCoordinates.of("test-index-abz-entity"));
|
||||
assertThat(count).isEqualTo(2);
|
||||
}
|
||||
|
||||
@@ -87,7 +88,7 @@ public class SpELEntityTests {
|
||||
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(QueryBuilders.matchAllQuery());
|
||||
nativeSearchQuery.addIndices("test-index-abz-entity");
|
||||
nativeSearchQuery.addTypes("myType");
|
||||
long count = template.count(nativeSearchQuery);
|
||||
long count = template.count(nativeSearchQuery, IndexCoordinates.of("test-index-abz-entity"));
|
||||
assertThat(count).isEqualTo(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,21 +22,24 @@ import lombok.Data;
|
||||
import java.util.List;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.Mapping;
|
||||
import org.springframework.data.elasticsearch.annotations.Setting;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
|
||||
import org.springframework.data.elasticsearch.core.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
import org.springframework.data.elasticsearch.repository.ElasticsearchCrudRepository;
|
||||
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
|
||||
import org.springframework.data.elasticsearch.utils.IndexInitializer;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
/**
|
||||
* SynonymRepositoryTests
|
||||
@@ -44,15 +47,21 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
* @author Artur Konczak
|
||||
* @author Peter-Josef Meisch
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@ContextConfiguration("classpath:synonym-test.xml")
|
||||
@SpringIntegrationTest
|
||||
@ContextConfiguration(classes = { SynonymRepositoryTests.Config.class })
|
||||
public class SynonymRepositoryTests {
|
||||
|
||||
@Configuration
|
||||
@Import({ ElasticsearchTemplateConfiguration.class })
|
||||
@EnableElasticsearchRepositories(basePackages = { "org.springframework.data.elasticsearch.repositories.synonym" },
|
||||
considerNestedRepositories = true)
|
||||
static class Config {}
|
||||
|
||||
@Autowired private SynonymRepository repository;
|
||||
|
||||
@Autowired private ElasticsearchTemplate elasticsearchTemplate;
|
||||
|
||||
@Before
|
||||
@BeforeEach
|
||||
public void before() {
|
||||
IndexInitializer.init(elasticsearchTemplate, SynonymEntity.class);
|
||||
}
|
||||
@@ -76,7 +85,7 @@ public class SynonymRepositoryTests {
|
||||
|
||||
List<SynonymEntity> synonymEntities = elasticsearchTemplate.queryForList(
|
||||
new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("text", "british")).build(),
|
||||
SynonymEntity.class);
|
||||
SynonymEntity.class, IndexCoordinates.of("test-index-synonym").withTypes( "synonym-type"));
|
||||
assertThat(synonymEntities).hasSize(1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user