考虑具有复杂对象字段的文档:
@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背景,并且期待类似的行为。如果不支持此功能,那么对于此类查询,推荐的方法是什么?
谢谢
答案 0 :(得分:1)
您正在寻找的内容相当于Query By Example(QBE),Spring-Data-ES尚不支持此功能。
如果您的映射是由应用程序决定的(@Mapping并且dynamic mapping设置为false的字段上的@Field),并且通过查看公共{{1} }-您将必须先使用QueryBuilder(弹性抽象)或Criteria(Spring-Data-ES抽象)然后再使用customizing your repository来手动构建查询。
如果您的映射关系不是由应用程序确定的(之前已在elastic上设置),则您必须知道它field types(它是'text','keyword'等),否则可能会有所不同每种类型(匹配查询,词条查询,过滤器等)的预期行为-并且还必须使用QueryBuilder或Criteria自定义实现。