mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-08 13:12:10 +00:00
Fix inner hits metadata mapping.
Original Pull Request #2522 Closes #2521
This commit is contained in:
parent
699c0ef265
commit
1f7fa77c15
@ -45,6 +45,7 @@ import org.springframework.util.Assert;
|
|||||||
* @author Roman Puchkovskiy
|
* @author Roman Puchkovskiy
|
||||||
* @author Matt Gilene
|
* @author Matt Gilene
|
||||||
* @author Sascha Woo
|
* @author Sascha Woo
|
||||||
|
* @author Jakob Hoeper
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public class SearchHitMapping<T> {
|
public class SearchHitMapping<T> {
|
||||||
@ -154,7 +155,8 @@ public class SearchHitMapping<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return highlightFields.entrySet().stream().collect(Collectors.toMap(entry -> {
|
return highlightFields.entrySet().stream().collect(Collectors.toMap(entry -> {
|
||||||
ElasticsearchPersistentProperty property = persistentEntity.getPersistentPropertyWithFieldName(entry.getKey());
|
ElasticsearchPersistentProperty property = persistentEntity
|
||||||
|
.getPersistentPropertyWithFieldName(entry.getKey());
|
||||||
return property != null ? property.getName() : entry.getKey();
|
return property != null ? property.getName() : entry.getKey();
|
||||||
}, Map.Entry::getValue));
|
}, Map.Entry::getValue));
|
||||||
}
|
}
|
||||||
@ -199,9 +201,10 @@ public class SearchHitMapping<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
ElasticsearchPersistentEntity<?> persistentEntityForType = mappingContext.getPersistentEntity(type);
|
||||||
NestedMetaData nestedMetaData = searchHits.getSearchHit(0).getContent().getNestedMetaData();
|
NestedMetaData nestedMetaData = searchHits.getSearchHit(0).getContent().getNestedMetaData();
|
||||||
ElasticsearchPersistentEntityWithNestedMetaData persistentEntityWithNestedMetaData = getPersistentEntity(
|
ElasticsearchPersistentEntityWithNestedMetaData persistentEntityWithNestedMetaData = getPersistentEntity(
|
||||||
mappingContext.getPersistentEntity(type), nestedMetaData);
|
persistentEntityForType, nestedMetaData);
|
||||||
|
|
||||||
if (persistentEntityWithNestedMetaData.entity != null) {
|
if (persistentEntityWithNestedMetaData.entity != null) {
|
||||||
List<SearchHit<Object>> convertedSearchHits = new ArrayList<>();
|
List<SearchHit<Object>> convertedSearchHits = new ArrayList<>();
|
||||||
@ -219,7 +222,8 @@ public class SearchHitMapping<T> {
|
|||||||
searchDocument.getSortValues(), //
|
searchDocument.getSortValues(), //
|
||||||
searchDocument.getHighlightFields(), //
|
searchDocument.getHighlightFields(), //
|
||||||
searchHit.getInnerHits(), //
|
searchHit.getInnerHits(), //
|
||||||
persistentEntityWithNestedMetaData.nestedMetaData, //
|
getPersistentEntity(persistentEntityForType, //
|
||||||
|
searchHit.getContent().getNestedMetaData()).nestedMetaData, //
|
||||||
searchHit.getExplanation(), //
|
searchHit.getExplanation(), //
|
||||||
searchHit.getMatchedQueries(), //
|
searchHit.getMatchedQueries(), //
|
||||||
targetObject));
|
targetObject));
|
||||||
|
@ -42,6 +42,7 @@ import org.springframework.lang.Nullable;
|
|||||||
* Testing the querying and parsing of inner_hits.
|
* Testing the querying and parsing of inner_hits.
|
||||||
*
|
*
|
||||||
* @author Peter-Josef Meisch
|
* @author Peter-Josef Meisch
|
||||||
|
* @author Jakob Hoeper
|
||||||
*/
|
*/
|
||||||
@SpringIntegrationTest
|
@SpringIntegrationTest
|
||||||
public abstract class InnerHitsIntegrationTests {
|
public abstract class InnerHitsIntegrationTests {
|
||||||
@ -58,8 +59,9 @@ public abstract class InnerHitsIntegrationTests {
|
|||||||
indexOps.createWithMapping();
|
indexOps.createWithMapping();
|
||||||
|
|
||||||
Inhabitant john = new Inhabitant("John", "Smith");
|
Inhabitant john = new Inhabitant("John", "Smith");
|
||||||
Inhabitant carla = new Inhabitant("Carla", "Miller");
|
Inhabitant carla1 = new Inhabitant("Carla", "Miller");
|
||||||
House cornerHouse = new House("Round the corner", "7", Arrays.asList(john, carla));
|
Inhabitant carla2 = new Inhabitant("Carla", "Nguyen");
|
||||||
|
House cornerHouse = new House("Round the corner", "7", Arrays.asList(john, carla1, carla2));
|
||||||
City metropole = new City("Metropole", Arrays.asList(cornerHouse));
|
City metropole = new City("Metropole", Arrays.asList(cornerHouse));
|
||||||
|
|
||||||
Inhabitant jack = new Inhabitant("Jack", "Wayne");
|
Inhabitant jack = new Inhabitant("Jack", "Wayne");
|
||||||
@ -76,7 +78,7 @@ public abstract class InnerHitsIntegrationTests {
|
|||||||
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
|
operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test // #2521
|
||||||
void shouldReturnInnerHits() {
|
void shouldReturnInnerHits() {
|
||||||
|
|
||||||
Query query = buildQueryForInnerHits("inner_hit_name", "hou-ses.in-habi-tants", "hou-ses.in-habi-tants.first-name",
|
Query query = buildQueryForInnerHits("inner_hit_name", "hou-ses.in-habi-tants", "hou-ses.in-habi-tants.first-name",
|
||||||
@ -91,7 +93,7 @@ public abstract class InnerHitsIntegrationTests {
|
|||||||
softly.assertThat(searchHit.getInnerHits()).hasSize(1);
|
softly.assertThat(searchHit.getInnerHits()).hasSize(1);
|
||||||
|
|
||||||
SearchHits<?> innerHits = searchHit.getInnerHits("inner_hit_name");
|
SearchHits<?> innerHits = searchHit.getInnerHits("inner_hit_name");
|
||||||
softly.assertThat(innerHits).hasSize(1);
|
softly.assertThat(innerHits).hasSize(2);
|
||||||
|
|
||||||
SearchHit<?> innerHit = innerHits.getSearchHit(0);
|
SearchHit<?> innerHit = innerHits.getSearchHit(0);
|
||||||
Object content = innerHit.getContent();
|
Object content = innerHit.getContent();
|
||||||
@ -106,6 +108,10 @@ public abstract class InnerHitsIntegrationTests {
|
|||||||
softly.assertThat(nestedMetaData.getChild().getField()).isEqualTo("inhabitants");
|
softly.assertThat(nestedMetaData.getChild().getField()).isEqualTo("inhabitants");
|
||||||
softly.assertThat(nestedMetaData.getChild().getOffset()).isEqualTo(1);
|
softly.assertThat(nestedMetaData.getChild().getOffset()).isEqualTo(1);
|
||||||
|
|
||||||
|
innerHit = innerHits.getSearchHit(1);
|
||||||
|
softly.assertThat(((Inhabitant) innerHit.getContent()).getLastName()).isEqualTo("Nguyen");
|
||||||
|
softly.assertThat(innerHit.getNestedMetaData().getChild().getOffset()).isEqualTo(2);
|
||||||
|
|
||||||
softly.assertAll();
|
softly.assertAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user