当前位置: 首页 > 知识库问答 >
问题:

查询Spring数据Elasticsearch以查找嵌套属性

欧阳嘉年
2023-03-14

我正在尝试查询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;
}

我的测试保存一个人的文档,并尝试使用repository方法读取它。但没有返回任何结果。以下是测试方法:

@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数据查询生成?

共有1个答案

姚骁
2023-03-14

Elasticsearch异步索引新文档。。。接近实时。我认为默认刷新通常是1s。因此,如果您希望文档像使用单元测试一样可以立即搜索,则必须明确请求刷新(以强制刷新和可供搜索的文档)。因此,单元测试需要包括ElasticsearchTemplate bean,以便可以显式调用refresh。确保将waitForOperation设置为true以强制同步刷新。请参阅此相关答案。有点像这样:

elasticsearchTemplate.refresh("myindex",true);
 类似资料:
  • 我正在通过jHipster使用Spring Data Elasticsearch支持,并试图更多地了解如何使用搜索来扩展数据库中的一些新关系。 我有了一个新的嵌套关系,它有自己的索引: 我想将结果筛选到特定用户“friend1.id”,并在嵌套文档上搜索匹配的详细信息? 但这似乎没有返回任何结果?

  • 我试图创建一个嵌套查询,它将过滤掉一些带有特定术语的文档。在本例中,我试图过滤掉在user.first中有匹配术语的文档。数据示例: 我的查询没有得到所需的结果,因为它返回给我所有未筛选的记录。我尝试使用: 我希望这里得到与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。做这件事的正确方法是什么?

  • 问题内容: 我正在尝试使用query_string编写查询以检索嵌套对象的数据查询。 我想做的查询的一个例子是: 其中“ a”是嵌套对象,“ id”是“ a”的字段。 我知道我可以使用嵌套查询成功地执行此任务,编写如下查询: 但是,我想避免这种情况。我不想自己弄清楚用户正在搜索嵌套字段并修改查询。我尝试使用“ fields”参数,但它似乎不适用于嵌套对象。 是否可以使用“ query_string

  • 问题内容: 我在获取与Elasticsearch一起使用的嵌套查询时遇到问题(如果我删除了查询字符串之一,则可以使用)。我要解决的问题是我有一个包含关闭列表的文档(关闭)。我想在条件满足另一个值的闭包列表中搜索一个值。那只是从argan = 1的闭包中获得价值 我正在得到这个错误响应; 我的映射如下所示。 有人知道我在做什么错吗? 问题答案: 您的查询不是有效的查询。您需要使用适当的复合查询将其他

  • 我是elasticsearch的新手,对如何进行过滤器、查询和聚合有一些想法,但不确定如何解决下面的问题。我希望能够从下面显示的文档中只查询公司的最新交付(日期和crate_quantity)。我不确定如何去做。有没有办法使用最大聚合从每个文档中只提取最近的交付?

  • 尊敬的弹性搜索专家, 我在查询嵌套对象时遇到问题。允许使用以下简化映射: 并将一些文档放在索引中: 现在我想执行这样的查询: 因此,我想得到匹配的公司与数量匹配的文件。因此,上面的查询应该会告诉我: 以下查询: 应该给我所有公司分配到一个文件,其标题包含“GPU”与匹配的文件数量: 如果表现良好,是否有可能实现这一结果?我显然对匹配的文档不感兴趣,只对匹配文档和嵌套对象的数量感兴趣。 谢谢你的帮助