按复杂对象字段查询

Query by complex Object field

考虑具有复杂对象字段的文档:

@Getter  @Setter
@Document
class A{
   @Id
    private String id;

 @Field(
        type = FieldType.Object,
        includeInParent = true
    )
    private B b;
}

@Getter  @Setter
class B{
String field1;
C c;
}

@Getter  @Setter
class C{
String field1;
}

public interface ARepo extends ElasticsearchRepository<A, String> {
    Optional<A> findByB(B b);
}

当我执行 aRepo.findByB(someB) 时,构建的查询不会提取 B 字段,但包含 someB.toString() 的结果作为字段 b 的过滤器。

我有 JPA 背景并期望有类似的行为。如果不支持,对于此类查询,推荐的方法是什么?

谢谢

您正在查找的内容等同于 Query By Example (QBE),Spring-Data-ES 尚不支持此功能。

在 class 对象上搜索应该取决于您的映射,如果您的映射是由应用程序确定的(@Field 在带有 @Mapping 和 dynamic mapping set to false), and by looking at public interface ElasticsearchRepository<...> - you will have to manually build your query using QueryBuilder (Elastic abstraction) or Criteria (Spring-Data-ES abstraction) and then customizing your repository 的字段上。

如果你的映射不是由应用程序决定的(之前已经在 elastic 上设置),你必须知道它 field types(它是 'text'、'keyword' 等) ,那么每种类型可能会有不同的行为(匹配查询、术语查询、过滤器等)——这也必须使用 QueryBuilder 或 Criteria 自定义实现。