spring-boot - Elasticsearch + Spring boot:使用@InnerField/@MultiField 从属性的方法名称创建查询
问题描述
我正在尝试使用方法名称构建一个 Elasticsearch 查询,并且只是好奇如果属性之一具有多个字段,如下所示的方法名称是什么
@MultiField(
mainField = @Field(type = Text, fielddata = true),
otherFields = {
@InnerField(suffix = "keyword", type = Keyword)
}
)
private String resourceType;
我需要“关键字”类型(未分析),所以我可以用整个字符串搜索它。
我试过了
List<Event> findByResourceType_KeywordIsIn(Collection<String> list);
并出现以下错误
No property keyword found for type String! Traversed path: Event.resourceType.
无论如何我可以告诉 spring-data-elasticsearch 它是用于相同的属性但 InnerField ?
PS:我当然可以使用@Query 或者只是使用 NativeSearchQueryBuilder 构建整个查询,但是如果我可以只使用方法名称来实现它(更少的代码-> 更少的单元测试:))
谢谢
解决方案
这不适用于存储库实现的方法名称。Spring Data 中进行解析的逻辑使用 java 类的 - 可能是嵌套的 - 属性,而您需要搜索resourceType.keyword Elasticsearch 字段的查询。
因此,正如您已经写的那样,您需要 a@Query
来执行此操作。
推荐阅读
- mysql - 如何使用表 1 和表 2 中的特定匹配行从表 1 中获取所有行
- hyperledger-fabric - fabric-sdk-java:NsReadWriteSet.parseFrom 抛出 InvalidProtocolBufferException
- android - 如何重命名谷歌播放控制台暂停的应用程序
- r - 在 R Shiny 中调用 downloadHandler 函数时,如何生成带有选择提示的弹出窗口,提示要下载哪个对象?
- java - Jira ServiceDesk 创建请求 API - 将字符串 [] 添加到自定义字段 (Java)
- android - 为什么 ExifInterfac 返回 0 的纬度和经度值?
- c# - 如何将 json 附加到 Elastic Search .NEST 客户端中的现有 json?
- r - 使用快捷方式引用将 R 对象名称转换为字符串
- react-native - 如何使用 expo 通过 React Native 收听 Mercure 服务器?
- r - 使用函数 fs::dir_ls 时如何忽略当前目录?