简体   繁体   中英

Querying Spring Data Elasticsearch for nested properties

I am trying to query spring data elasticsearch repositories for nested properties. My Repository looks like this:

public interface PersonRepository extends
        ElasticsearchRepository<Person, Long> {

    List<Person> findByAddressZipCode(String zipCode);
}

The domain objects Person and Address (without getters/setters) are defined as follows:

@Document(indexName="person")
public class Person {
  @Id
  private Long id;

  private String name;

  @Field(type=FieldType.Nested, store=true, index = FieldIndex.analyzed)
  private Address address;
}

public class Address {
  private String zipCode;
}

My test saves one Person document and tries to read it with the repository method. But no results are returned. Here is the test method:

@Test
public void testPersonRepo() throws Exception {
    Person person = new Person();
    person.setName("Rene");
    Address address = new Address();
    address.setZipCode("30880");
    person.setAddress(address);
    personRepository.save(person);
    elasticsearchTemplate.refresh(Person.class,true);
    assertThat(personRepository.findByAddressZipCodeContaining("30880"), hasSize(1));
}

Does spring data elasticsearch support the default spring data query generation?

Elasticsearch indexes the new document asynchronously... near real-time . The default refresh is typically 1s I think. So you must explicitly request a refresh (to force a flush and the document available for search) if you are wanting the document immediately searchable as with a unit test. So your unit test needs to include the ElasticsearchTemplate bean so that you can explicitly call refresh . Make sure you set waitForOperation to true to force a synchronous refresh. See this related answer . Kinda like this:

elasticsearchTemplate.refresh("myindex",true);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM