【问题标题】:Querying Spring Data Elasticsearch for nested properties查询 Spring Data Elasticsearch 的嵌套属性
【发布时间】:2015-10-02 22:27:49
【问题描述】:

我正在尝试查询 spring data elasticsearch 存储库以获取嵌套属性。我的存储库如下所示:

public interface PersonRepository extends
        ElasticsearchRepository<Person, Long> {

    List<Person> findByAddressZipCode(String zipCode);
}

域对象 Person 和 Address(没有 getter/setter)定义如下:

@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;
}

我的测试保存了一个 Person 文档并尝试使用存储库方法读取它。但没有返回任何结果。下面是测试方法:

@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));
}

spring data elasticsearch是否支持默认spring data查询生成?

【问题讨论】:

    标签: java elasticsearch spring-data spring-data-elasticsearch


    【解决方案1】:

    Elasticsearch 异步索引新文档...near real-time。我认为默认刷新通常是 1 秒。因此,如果您希望文档像单元测试一样立即可搜索,则必须明确请求刷新(强制刷新并且文档可用于搜索)。因此,您的单元测试需要包含 ElasticsearchTemplate bean,以便您可以显式调用 refresh。确保将 waitForOperation 设置为 true 以强制同步刷新。看到这个related answer。有点像这样:

    elasticsearchTemplate.refresh("myindex",true);
    

    【讨论】:

    • 感谢提示,我添加了 elasticsearchTemplate.refresh(Person.class,true);但这无济于事。但是,如果我执行 personRepository.findAll() 它会返回文档。
    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多