此文章是给有所基础的人看
最最基础请看另一篇安装与介绍(点此链接,自动跳转)
/* 文章结尾有完整 CRUD demo*/
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
application.properties文件配置:
spring.data.elasticsearch.repositories.enabled = true
spring.data.elasticsearch.cluster-nodes =127.0.0.1:9300
首先我们准备好实体类:
public class Item {
private Long id;
private String title; //标题
private String category;// 分类
private String brand; // 品牌
private Double price; // 价格
private String images; // 图片地址
}
1. javaBean:
package com.czxy.domain;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import javax.persistence.*;
@Document(indexName = "product",type = "product", shards = 1, replicas = 0)
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "pid")
private Integer id;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String pname;
@Field(type = FieldType.Double)
private Double price;
@Field(type = FieldType.Integer)
private Integer cid;
private Category category;
//get set 方法省略......
}
package com.czxy.domain;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import javax.persistence.Column;
import javax.persistence.Id;
@Document(indexName = "category",type = "category", shards = 1, replicas = 0)
public class Category {
@Id
@Column(name = "cid")
private Integer id;
//不分词
@Field(type = FieldType.Keyword)
private String cname;
//get set 方法省略......
}
package com.czxy.dao;
import com.czxy.domain.Product;
import tk.mybatis.mapper.common.Mapper;
@org.apache.ibatis.annotations.Mapper
public interface ProductMapper extends Mapper<Product> {
}
/***************************/
package com.czxy.dao;
import com.czxy.domain.Category;
import tk.mybatis.mapper.common.Mapper;
@org.apache.ibatis.annotations.Mapper
public interface CateGoryMapper extends Mapper<Category> {
}
package com.czxy.domain.vo;
import com.czxy.es.pojo.EsProduct;
import java.util.List;
public class EasyUIResult<T> {
private long total;
private List<T> rows;
//get set 方法省略......
}
1.2.Repository(后缀是Repository,继承ElasticsearchRepository)
package com.czxy.es;
import com.czxy.domain.Product;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
//第一个参数是:实体类
//第二个参数是:实体类的id字段的属性
public interface ProductRepository extends ElasticsearchRepository <Product,Integer>{
}
2.业务层 查询
package com.czxy.service;
import com.czxy.dao.CateGoryMapper;
import com.czxy.dao.ProductMapper;
import com.czxy.domain.Category;
import com.czxy.domain.Product;
import com.czxy.domain.vo.EasyUIResult;
import com.czxy.es.ProductRepository;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.index.query.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
/**
* @author Fang
* @create 2018-10-11 11:13
* @desc
**/
@Service
@Transactional
public class ProductService {
@Autowired
private ProductMapper productMapper;
@Autowired
private CateGoryMapper cateGoryMapper;
//es 所用操作类
@Autowired
private ProductRepository productRepository;
/**
*@author Fang
*@create 2018/10/13 17:11
*@desc 查询
**/
public EasyUIResult<Product> findAll(Integer page, Integer rows