可以通过实体类来进行类型的mapping映射。首先定义商品的数据结构,创建包com.javadevmap.elasticexample.model,然后新建Product类,具体如下:
在Product类上使用Spring Data Elasticsearch的注解@Document(indexName="java-dev- map",type="product"),此注解声明Product类为被索引的文档,属性indexName声明了索引的名称;属性type声明了索引中文档的类型。字段id上的注解@Id即文档的主键,是唯一标识。Product类中字段productPic的注解@Field(type=FieldType.String,index= FieldIndex.not_analyzed),声明了字段productPic的数据类型为String,同时该字段的值不做分析,不做分析的字段在搜索时是会进行完全匹配的。字段productName、price、brand、productDesc没有添加@Field注解,ElasticSearch会根据其Java类型自动确定数据类型,同时对字段的值进行文本分析,因此可以支持全文检索。
ElasticSearch常用于实体Bean的注解见表15-4。
表15-4 Bean注解
在定义完Product实体Bean后,创建相应的仓库与ElasticSearch进行交互。Spring Data为开发者简化了与数据源的操作交互方式。只需按照接口的方式声明所要执行的操作即可,具体的实现由Spring Data自动生成。Spring Data提供了对常见的创建、查询、更新和删除操作以及分页和排序的支持,显著降低了开发人员操作ElasticSearch的门槛。
public interface ProductRepository extends ElasticsearchRepository<Product,String>{
}(www.xing528.com)
这里读者会发现不需要实现任何方法,当前ProductRepository已经具备了基本的增删改查能力。编写一个测试类进行验证。
运行结果如下:
当这些默认方法不能覆盖所有业务的数据操作需求时,就需要扩展方法。扩展使用方法时,就好像用英文直译要做的事情一样来定义方法名,例如想通过brand来查找ElasticSearch中某条数据,只要定义一个方法findByBrand,这样就具备了通过brand查找的能力。下面在ProductRepository中定义几个方法来扩充ElasticSearch操作的能力。
就如上面所写,只要把想做的事按照JPA的规则命名一个方法,即完成了ElasticSearch操作语句的建立,使用以上规则(参见7.5.2节),就可以自由组装接口方法来扩展ElasticSearch的操作能力。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。