与Spring Data JPA不同的是,Spring Data Elasticsearch默认使用下划线分隔符将实体类属性映射到索引中的字段名称。因此,如果您定义了一个大驼峰命名的属性,例如:userName,它会被映射到Elasticsearch索引中的”user_name”字段。
在使用Spring Data Elasticsearch进行查询时,可以通过使用下划线来访问这些属性。例如,要查找所有用户名为”admin”的用户:
public interface UserRepository extends ElasticsearchRepository<User, Long> {
List<User> findByUser_Name(String userName);
}
请注意,在方法名称中使用”_Name”而不是大驼峰形式的”userName”。
如果您希望在Elasticsearch中使用与实体类相同的大驼峰命名法进行查询,则需要在@Entity注解中指定@Document注解,并设置其indexName属性为索引名称和type属性为文档类型:
@Entity
@Document(indexName = "user_index", type = "user")
public class User {
//...
}
然后,在@Repository接口中编写自定义查询方法并使用@Query注解指定查询语句:
public interface UserRepository extends ElasticsearchRepository<User, Long> {
@Query("{\"match\": {\"userName\": \"?0\"}}")
List<User> findByUserName(String userName);
}
注意,在@Query注解中使用实体类属性名称而不是列名或下划线分隔符,并且需要按照Elasticsearch DSL规范编写JSON格式的查询语句。