Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package example.springdata.elasticsearch.speaker;

import lombok.Builder;
import lombok.Data;

/**
* Speaker of a talk.
*/
@Data
@Builder
public class Speaker {

/**
* Speaker name.
*/
private String name;

/**
* Speaker position.
*/
private String position;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/**
* Domain classes for speaker examples in Spring Data Elasticsearch.
*/
package example.springdata.elasticsearch.speaker;
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package example.springdata.elasticsearch.talk;

import example.springdata.elasticsearch.speaker.Speaker;

import java.util.List;

import lombok.Builder;
import lombok.Data;
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;

/**
* Elasticsearch talk document.
*/
@Data
@Builder
@Document(indexName = "talks")
public class Talk {

/**
* Document id.
*/
@Id
private String id;

/**
* Talk title.
*/
private String title;

/**
* Speakers of this talk.
*/
@Field(type = FieldType.Nested)
private List<Speaker> speakers;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/**
* Domain classes for talk examples in Spring Data Elasticsearch.
*/
package example.springdata.elasticsearch.talk;
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,12 @@

import static org.assertj.core.api.Assertions.*;

import example.springdata.elasticsearch.speaker.Speaker;
import example.springdata.elasticsearch.talk.Talk;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -103,4 +107,38 @@ void geoSpatialSearch() {

assertThat(result).hasSize(2);
}

@Test
void criteriaQueryOnNestedSpeakers() {

String speakerName = "Ali";
var speaker = Speaker.builder()
.name(speakerName)
.position("Developer")
.build();

var talkWithSpeaker = Talk.builder()
.id("1")
.title("Spring & Elasticsearch")
.speakers(List.of(speaker))
.build();

var talkWithoutSpeaker = Talk.builder()
.id("2")
.title("No Speakers Here")
.build();

operations.save(talkWithSpeaker);
operations.save(talkWithoutSpeaker);

var criteria = new Criteria("speakers.name").is(speakerName);
var query = new CriteriaQuery(criteria);

var result = operations.search(query, Talk.class);

assertThat(result).hasSize(1);
assertThat(result.getSearchHits().get(0).getContent()
.getSpeakers().get(0).getName())
.isEqualTo(speakerName);
}
}