目录
环境准备
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
编写配置文件
# es 服务地址
elasticsearch.host=192.168.80.10
# es 服务端口
elasticsearch.port=9200
# 配置日志级别,开启 debug 日志
logging.level.com.atguigu.es=debug
编写配置类
- ElasticsearchRestTemplate 是 spring-data-elasticsearch 项目中的一个类,和其他 spring 项目中的 template类似。
- 在新版的 spring-data-elasticsearch 中,ElasticsearchRestTemplate 代替了原来的 ElasticsearchTemplate。
- 原因是 ElasticsearchTemplate 基于 TransportClient,TransportClient 即将在 8.x 以后的版本中移除。所以,推荐使用 ElasticsearchRestTemplate。
- ElasticsearchRestTemplate 基 于 RestHighLevelClient 客户端的。需要自定义配置类,继承AbstractElasticsearchConfiguration,并实现 elasticsearchClient()抽象方法,创建 RestHighLevelClient 对象。
@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private Integer port;
//重写父类方法
@Override
public RestHighLevelClient elasticsearchClient() {
RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
RestHighLevelClient restHighLevelClient = new
RestHighLevelClient(builder);
return restHighLevelClient;
}
}
创建实体类映射操作
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "shopping")
public class ProductES {
//必须有 id,这里的 id 是全局唯一的标识,等同于 es 中的"_id"
@Id
private Long id;//商品唯一标识
/**
* type : 字段数据类型
* analyzer : 分词器类型
* index : 是否索引(默认:true)
* Keyword : 短语,不进行分词
*/
@Field(type = FieldType.Text)
private String title;//商品名称
@Field(type = FieldType.Keyword)
private String category;//分类名称
@Field(type = FieldType.Double)
private Double price;//商品价格
@Field(type = FieldType.Keyword, index = false)
private String images;//图片地址
}
创建DAO数据访问对象
@Repository
public interface ProductDao extends ElasticsearchRepository<ProductES, Long> {
}
注入依赖
@Autowired
private ElasticsearchRestTemplate estemplate;
@Autowired
private ProductDao productDao;
索引操作
添加索引
// 创建索引并增加映射配置
estemplate.createIndex(ProductES.class);
删除索引
estemplate.deleteIndex(ProductES.class);
文档操作
添加文档
ProductES product = new ProductES();
product.setId(2L);
product.setTitle("华为手机");
product.setCategory("手机");
product.setPrice(2999.0);
product.setimages("https://blog.csdn.net/xiaoyixiao_?spm=1001.2014.3001.5343");
productDao.save(product);
批量添加文档
List<ProductES> productList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
ProductES product = new ProductES();
product.setId(Long.valueOf(i));
product.setTitle("[" + i + "]小米手机");
product.setCategory("手机");
product.setPrice(1999.0 + i);
product.setimages("https://blog.csdn.net/xiaoyixiao_?spm=1001.2014.3001.5343");
productList.add(product);
}
productDao.saveAll(productList);
修改文档
ProductES product = new ProductES();
product.setId(2L);
product.setTitle("小米手机");
product.setCategory("手机");
product.setPrice(2999.0);
product.setimages("https://blog.csdn.net/xiaoyixiao_?spm=1001.2014.3001.5343");
productDao.save(product);
删除文档
ProductES product = new ProductES();
product.setId(2L);
productDao.delete(product);
通过ID查找文档
ProductES productES = productDao.findById(2L).get();
查询全部文档
Iterable<ProductES> products = productDao.findAll();
查询操作
分页查询
//设置排序(排序方式,正序还是倒序,排序的 id)
Sort sort = Sort.by(Sort.Direction.DESC, "id");
int currentPage = 0;//当前页,第一页从 0 开始,1 表示第二页
int pageSize = 5;//每页显示多少条
//设置查询分页
PageRequest pageRequest = PageRequest.of(currentPage, pageSize, sort);
//分页查询
Page<ProductES> productPage = productDao.findAll(pageRequest);
匹配查询
TermQueryBuilder termQuery = QueryBuilders.termQuery("title", "小米");
Iterable<ProductES> products = productDao.search(termQuery);
匹配分页查询
int currentPage = 0;
int pageSize = 5;
//设置查询分页
PageRequest pageRequest = PageRequest.of(currentPage, pageSize);
TermQueryBuilder termQuery = QueryBuilders.termQuery("title", "小米");
Iterable<ProductES> products = productDao.search(termQuery, pageRequest);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。