一、前言
之前被领导问过做没做过es的数据清洗,确实没有,所以这阵子以elk数据清洗平台为目标系统的学习下es的相关组件,这里对es的基本操作不做整理,只对集成过程做记录。
二、es安装
这里用到的版本是es7.8,由于开发机主板被上一个人锁了,所以只能安装windows版本的,解压后更改config下的elasticsearch.yml,依次添加或修改下面的配置。
node.name: node-1
path.data: E:\elasticsearch-7.8.0\data
path.logs: E:\elasticsearch-7.8.0\logs
network.host: 0.0.0.0
cluster.initial_master_nodes: ["node-1"]
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
顺便添加analysis-ik分词器到plugins目录下
image.png
然后返回bin下双击elasticsearch.bat,默认jdk版本是11但是也会适配到8,启动后开
image.png
三、springboot中集成 es-cli
es的版本有点高,发现springboot2.2 之后的会有点问题,这里用到的是spring-data-elasticsearch
添加pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
修改配置文件
spring.elasticsearch.rest.uris = 127.0.0.1:9200
spring.elasticsearch.rest.username = elastic
spring.elasticsearch.rest.password = changeme
spring.data.elasticsearch.repositories.enabled = true
logging.level.root = warn
logging.level.com.example.springbootes = debug
添加配置类
package com.example.springbootes.config;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
import org.springframework.data.elasticsearch.core.ElasticsearchEntityMapper;
import org.springframework.data.elasticsearch.core.EntityMapper;
import java.time.Duration;
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Value("${spring.elasticsearch.rest.uris}")
private String hostAndPort;
@Value("${spring.elasticsearch.rest.username}")
private String username;
@Value("${spring.elasticsearch.rest.password}")
private String password;
@Override
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(hostAndPort)
.withConnectTimeout(Duration.ofSeconds(5))
.withSocketTimeout(Duration.ofSeconds(3))
.withBasicAuth(username, password)
.build();
return RestClients.create(clientConfiguration).rest();
}
// use the ElasticsearchEntityMapper
@Bean
@Override
public EntityMapper entityMapper() {
ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(elasticsearchMappingContext(),
new DefaultConversionService());
entityMapper.setConversions(elasticsearchCustomConversions());
return entityMapper;
}
}
创建实体
package com.example.springbootes.bean;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import java.io.Serializable;
@Data
@Document(indexName = "commodity")
public class Commodity implements Serializable {
@Id
private String skuId;
private String name;
private String category;
private Integer price;
private String brand;
private Integer stock;
}
接口
package com.example.springbootes.dao;
import com.example.springbootes.bean.Commodity;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CommodityRepository extends ElasticsearchRepository<Commodity, String> {
}
Service
package com.example.springbootes.service;
import com.example.springbootes.bean.Commodity;
import com.example.springbootes.dao.CommodityRepository;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class CommodityService {
@Autowired
private CommodityRepository commodityRepository;
public long count() {
return commodityRepository.count();
}
public Commodity save(Commodity commodity) {
return commodityRepository.save(commodity);
}
public void delete(Commodity commodity) {
commodityRepository.delete(commodity);
// commodityRepository.deleteById(commodity.getSkuId());
}
public Iterable<Commodity> getAll() {
return commodityRepository.findAll();
}
public List<Commodity> getByName(String name) {
List<Commodity> list = new ArrayList<>();
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("name", name);
Iterable<Commodity> iterable = commodityRepository.search(matchQueryBuilder);
iterable.forEach(e->list.add(e));
return list;
}
public Page<Commodity> pageQuery(Integer pageNo, Integer pageSize, String kw) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchPhraseQuery("name", kw))
.withPageable(PageRequest.of(pageNo, pageSize))
.build();
return commodityRepository.search(searchQuery);
}
}
test测试
package com.example.springbootes;
import com.example.springbootes.bean.Commodity;
import com.example.springbootes.service.CommodityService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import java.util.List;
@SpringBootTest
class SpringbootEsApplicationTests {
@Autowired
private CommodityService commodityService;
@Test
public void contextLoads() {
System.out.println(commodityService.count());
}
@Test
public void testInsert() {
Commodity commodity = new Commodity();
commodity.setSkuId("1501009001");
commodity.setName("原味切片面包(10片装)");
commodity.setCategory("101");
commodity.setPrice(880);
commodity.setBrand("良品铺子");
commodityService.save(commodity);
commodity = new Commodity();
commodity.setSkuId("1501009002");
commodity.setName("原味切片面包(6片装)");
commodity.setCategory("101");
commodity.setPrice(680);
commodity.setBrand("良品铺子");
commodityService.save(commodity);
commodity = new Commodity();
commodity.setSkuId("1501009004");
commodity.setName("元气吐司850g");
commodity.setCategory("101");
commodity.setPrice(120);
commodity.setBrand("百草味");
commodityService.save(commodity);
}
@Test
public void testDelete() {
Commodity commodity = new Commodity();
commodity.setSkuId("1501009002");
commodityService.delete(commodity);
}
@Test
public void testGetAll() {
Iterable<Commodity> iterable = commodityService.getAll();
iterable.forEach(e->System.out.println(e.toString()));
}
@Test
public void testGetByName() {
List<Commodity> list = commodityService.getByName("面包");
System.out.println(list);
}
@Test
public void testPage() {
Page<Commodity> page = commodityService.pageQuery(0, 10, "切片");
System.out.println(page.getTotalPages());
System.out.println(page.getNumber());
System.out.println(page.getContent());
}
}
-end-
网友评论