@Data@Document(indexName = "lat",type = "product",shards = 3,replicas = 1)@AllArgsConstructor@NoArgsConstructorpublic class Product {@Idprivate Long id;@Field(value = "http://www.kingceram.com/post/title",type = FieldType.Text,analyzer = "ik_max_word")private String title; //标题@Field(value = "http://www.kingceram.com/post/category",type = FieldType.Keyword)private String category;// 分类@Field(value = "http://www.kingceram.com/post/brand",type = FieldType.Keyword)private String brand; // 品牌@Field(value = "http://www.kingceram.com/post/price",type = FieldType.Double)private Double price; // 价格@Field(value = "http://www.kingceram.com/post/images",type = FieldType.Keyword,index = false)private String images; // 图片地址}
@Id:声明实体类的id@Field:声明字段属性
我们先创建一个测试类,然后注入e:
@Autowiredprivate ElasticsearchTemplate template;
下面是创建索引库的API示例:
@Testpublic void createIndex() {//创建索引的方法template.createIndex(Product.class);}
创建索引库需要指定的信息,比如:索引库名、类型名、分片、副本数量、还有映射信息都已经填写
3.3.2.创建映射
@Testpublic void putMapping() {//创建类型映射template.putMapping(Product.class);}
3.4.索引数据CRUD
SDE的索引数据CRUD并没有封装在e中,而是有一个叫做 ory的接口:
我们需要自定义接口,继承tory:
/*** @Author panghl* @Date 2021/9/5 0:17* @Description* 当SDE访问索引库时,需要定义一个持久层的接口去继承ElasticsearchRepository 即可,无需实现**/public interface ProductRepository extends ElasticsearchRepository {/*** 根据价格区间查询* @param from 开始价格* @param to 结束价格* @return 符合条件的goods*/List findByPriceBetween(Double from, Double to);}
3.4.1.创建索引数据
@Autowiredprivate ProductRepository productRepository;@Testpublic void addDoc() {Product product1 = new Product(1L, "锤子手机", "手机", "锤子", 3288.88d, "http://image.huawei.com/1.jpg");Product product2 = new Product(2L, "华为手机", "手机", "华为", 3288.88d, "http://image.huawei.com/1.jpg");Product product3 = new Product(3L, "小米手机", "手机", "小米", 3288.88d, "http://image.huawei.com/1.jpg");Product product4 = new Product(4L, "苹果手机", "手机", "苹果", 3288.88d, "http://image.huawei.com/1.jpg");Product product5 = new Product(5L, "OPPO手机", "手机", "OPPO", 3288.88d, "http://image.huawei.com/1.jpg");List productList = new ArrayList<>();productList.add(product1);productList.add(product2);productList.add(product3);productList.add(product4);productList.add(product5);productRepository.saveAll(productList);System.out.println("save success");}
3.4.2.查询索引数据
默认提供了根据id查询,查询所有两个功能:
@Testpublic void queryIndexData() {Product product = productRepository.findById(1L).orElse(new Product());//取出数据//orElse 方法的作用:如果optional中封装的实体对象为空也就是没有从索引库中查询出匹配的文档,返回orElse的参数System.out.println("product=>" + product);}
3.4.3.自定义方法查询
提供的查询方法有限,但是它却提供了非常强大的自定义查询功能:
只要遵循提供的语法,我们可以任意定义方法声明:
/*** 根据价格区间查询* @param from 开始价格* @param to 结束价格* @return 符合条件的goods*/List findByPriceBetween(Double from, Double to);
- foxmail-qq代发 python邮件入门,通过互联网服务器发送邮件
- 四 网络编程懒人入门:快速理解TCP和UDP的差异
- 五 网络编程懒人入门:快速理解为什么说UDP有时比TCP更有优势
- webpack 从入门到放弃!
- 知识图谱入门 【三】- 知识抽取
- python入门速通基础
- 推荐|机器学习入门方法和资料合集
- 1923: 【入门】墨汁
- Pr 入门教程:如何添加焦点拉动效果?
- Arduino基础入门之十 红外遥控1位数码管的显示