gpt4 book ai didi

java - 查询 Spring Data Elasticsearch 的嵌套属性

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:02 27 4
gpt4 key购买 nike

我正在尝试查询 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查询生成?

最佳答案

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

elasticsearchTemplate.refresh("myindex",true);

关于java - 查询 Spring Data Elasticsearch 的嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404012/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com