首页 > 解决方案 > 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-bootelasticsearchspring-data-elasticsearch

解决方案


这不适用于存储库实现的方法名称。Spring Data 中进行解析的逻辑使用 java 类的 - 可能是嵌套的 - 属性,而您需要搜索resourceType.keyword Elasticsearch 字段的查询。

因此,正如您已经写的那样,您需要 a@Query来执行此操作。


推荐阅读