/**
*实体类
*/
package com.atguigu.pojo;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.io.Serializable;
@Document(indexName = "item", shards = 1, replicas = 1)
public class Item implements Serializable {
@Id //愿数据文档ID
private Long id;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String title;//标题
@Field(type = FieldType.Keyword)
private String category;//分类
@Field(type = FieldType.Keyword)
private String brand;
@Field(type = FieldType.Double)
private Double price;
@Field(index = false, type = FieldType.Keyword)
private String images;
public Item(){
}
public Item(Long id, String title, String category, String brand, Double price, String images) {
this.id = id;
this.title = title;
this.category = category;
this.brand = brand;
this.price = price;
this.images = images;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getImages() {
return images;
}
public void setImages(String images) {
this.images = images;
}
@Override
public String toString() {
return "Item{" +
"id=" + id +
", title='" + title + '\'' +
", category='" + category + '\'' +
", brand='" + brand + '\'' +
", price=" + price +
", images='" + images + '\'' +
'}';
}
}
/**
*配置类
*/
package com.atguigu.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
private String host;
private int port;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
@Override
public RestHighLevelClient elasticsearchClient() {
return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port)));
}
}
/**
*pom.xml
*/
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SpringbootElasticsearchDataES</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--编译插件,可以把所有jar打包进项目-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
/**
*application.yml
*/
elasticsearch:
host: localhost
port: 9200
/**
*具体增删改查代码
*/
package com.atguigu.test;
import com.atguigu.dao.ItemRepository;
import com.atguigu.pojo.Item;
import org.elasticsearch.client.RestHighLevelClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataES {
@Autowired
RestHighLevelClient restHighLevelClient;
@Autowired
ElasticsearchRestTemplate template;
@Test
public void testES(){
System.out.println("restHighLevelClient = " + restHighLevelClient);
System.out.println("template = " + template);
}
/**
* springboot elasticsearchDataEs创建索引
*/
@Test
public void testTwo(){
template.createIndex(Item.class);
template.putMapping(Item.class);
}
@Autowired
ItemRepository itemRepository;
/**
* 增加文档
*/
@Test
public void testAdd(){
Item item = new Item(1L,"小米手机7","手机","小米",999.8,"");
itemRepository.save(item);
}
/**
* 更新数据
* 没有添加,有更新
*/
@Test
public void testUpdate(){
Item item = new Item(1L,"小米手机7","手机","小米",999.8,"http://www.baidu.com");
itemRepository.save(item);
}
/**
* 批量添加
*/
@Test
public void addAll(){
//list
List<Item> list = new ArrayList<>();
list.add(new Item(2L,"锤子2","手机","锤子",2000.2,"http://www.eee.com"));
list.add(new Item(3L,"华为pro","手机","华为",1000.5,"http://www.huawei.com"));
itemRepository.saveAll(list);
}
/**
* 删除
*/
@Test
public void testDelete(){
itemRepository.deleteById(1L);
}
/**
* 根据ID查询
*/
@Test
public void testQuery(){
Optional<Item> optional = itemRepository.findById(2L);
System.out.println("optional.get() = " + optional.get());
}
/**
* 查询全部
*/
@Test
public void testFindALl(){
Iterable<Item> items = itemRepository.findAll(Sort.by(Sort.Direction.DESC, "price"));
items.forEach(item -> System.out.println("item = " + item));
}
}