Search code examples
spring-bootelasticsearchspring-data-elasticsearch

Elasticsearch + Spring boot: Query creation from method names for property with @InnerField/@MultiField


I'm trying to build an Elasticsearch query using method name and just curios on what would be the method name if one of the property has multiple fields like following

    @MultiField(
            mainField = @Field(type = Text, fielddata = true),
            otherFields = {
                    @InnerField(suffix = "keyword", type = Keyword)
            }
    )
    private String resourceType;

I needed "keyword" type (non-analyzed) so I can search it with entire string.

I have tried it as

List<Event> findByResourceType_KeywordIsIn(Collection<String> list);

and getting following error

No property keyword found for type String! Traversed path: Event.resourceType.

Is there anyway I can tell spring-data-elasticsearch that it is for the same property but an InnerField ?

P.S: I can certainly go with either @Query or just build that entire query using NativeSearchQueryBuilder but curios if I can achieve it with just a method name(Less code -> Less unit testing :) )

Thanks


Solution

  • This won't work with the method names of Repository implementations. The logic in Spring Data that does the parsing uses the - possibly nested - properties of the java class whereas you need to have a query searching the resourceType.keyword Elasticsearch field.

    So as you already wrote, you'll need a @Query to do this.