springboot集成elasticsearch实现增删改查及聚类

pom.xml

	<!--elasticSearch整合-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
	</dependency>

application.yml

#====================== 配置elasticSearch ====================#
data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 192.168.1.133:9200
      repositories:
        enabled: true
  elasticsearch:
    rest:
      uris: 192.168.1.133:9200
      connection-timeout: 10s

实体类

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;

// indexName :索引名字(对应mysql的数据库名字)
//type:类型(对应mysql的表名)
@Document(indexName = "item",type = "docs", shards = 10, replicas = 2)
public class Employee { 
    
    @Id 
    private String id;
    @Field(type = FieldType.Text, analyzer = "ik_max_word",fielddata = true)
    private String firstName;
    @Field (type = FieldType.Text,fielddata = true)
    private String lastName;
    @Field (type = FieldType.Integer)
    private Integer age=0; 
    @Field (type = FieldType.Keyword)
    private String about; 
 
    public String getId() {return id;}
    public void setId(String id){this.id = id;}
    public String getFirstName() {return firstName;}
    public void setFirstName(String firstName) {this.firstName = firstName;}
    public String getLastName() {return lastName;}
    public void setLastName(String lastName) {this.lastName = lastName;}
    public Integer getAge() {return age;}
    public void setAge(Integer age) {this.age = age;}
    public String getAbout() {return about;}
    public void setAbout(String about) {this.about = about;}

    public Employee(String id, String firstName, String lastName, Integer age, String about) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
        this.about = about;
    }

    public Employee() {
        super();
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id='" + id + '\'' +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", age=" + age +
                ", about='" + about + '\'' +
                '}';
    }
}

elasticsearch增删改查及聚类查询junit测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class EsTest {
	@Autowired
	private EmployeeRepository er;

	@Test
	public void saveIndex() {
		ArrayList<Employee> list = new ArrayList<>();
		list.add(new Employee("1", "哈利", "波特", 25, "哈利·波特"));
		list.add(new Employee("2", "赫敏", "格兰杰", 25, "哈利·波特"));
		list.add(new Employee("3", "罗恩", "韦斯莱", 25, "哈利·波特"));
		list.add(new Employee("4", "阿不思", "邓布利多", 65, "哈利·波特"));
		list.add(new Employee("5", "西弗勒斯", "斯内普", 42, "哈利·波特"));
		list.add(new Employee("6", "阿拉斯托", "穆迪", 57, "哈利·波特"));
		list.add(new Employee("7", "琼恩", "雪诺", 57, "权力的游戏"));
		list.add(new Employee("8", "丹尼莉丝", "坦格利安", 57, "权力的游戏"));
		list.add(new Employee("9", "提利昂", "兰尼斯特", 57, "权力的游戏"));
		list.add(new Employee("10", "艾莉亚", "史塔克", 57, "权力的游戏"));
		er.saveAll(list);
	}

	/**
	 * 查询所有
	 */
	@Test
	public void findAll() {
		Iterable<Employee> all = er.findAll();
		all.forEach(System.out::println);
	}

	/**
	 * 删除所有
	 */
	@Test
	public void deleteAll() {
		er.deleteAll();
		System.out.println("删除成功");
	}

	/**
	 * 查询所有按字段排序
	 */
	@Test
	public void findAllSort() {
		Iterable<Employee> all = er.findAll(Sort.by(Sort.Direction.ASC, "age"));
		all.forEach(System.out::println);
	}

	/**
	 * 自定义查询方法
	 */
	@Test
	public void findCustom() {
		Iterable<Employee> all = er.queryByAgeBetween(1, 5);
		all.forEach(System.out::println);
	}

	/**
	 * 普通自定义查询
	 */
	@Test
	public void customQuery() {
		FuzzyQueryBuilder termQueryBuilder = QueryBuilders.fuzzyQuery("firstName", "艾莉亚");
		MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("firstName", "艾莉亚");
		Iterable<Employee> search1 = er.search(matchQueryBuilder);
		Iterable<Employee> search2 = er.search(termQueryBuilder);
		search1.forEach(System.out::println);
		System.out.println("------------");
		search2.forEach(System.out::println);
	}

	/**
	 * 分页查询
	 */
	@Test
	public void nativeQuery() {
		NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
		nativeSearchQueryBuilder.withPageable(PageRequest.of(0, 1));
		nativeSearchQueryBuilder.withQuery(QueryBuilders.matchQuery("firstName", "艾莉亚"));
		Page<Employee> items = er.search(nativeSearchQueryBuilder.build());
		// 打印总条数
		System.out.println(items.getTotalElements());
		// 打印总页数
		System.out.println(items.getTotalPages());
		items.forEach(System.out::println);
	}
	/**
	 * 聚类查询
	 */
	@Test
	public void juleiQuery() {
		NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
		nativeSearchQueryBuilder.withPageable(PageRequest.of(0, 10));
		nativeSearchQueryBuilder.withQuery(QueryBuilders.matchQuery("about", "哈利"));
		Page<Employee> items = er.search(nativeSearchQueryBuilder.build());
		// 打印总条数
		System.out.println(items.getTotalElements());
		// 打印总页数
		System.out.println(items.getTotalPages());
		items.forEach(System.out::println);
	}

}

实现自定义查询方法

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;
 
@Component
public interface EmployeeRepository extends ElasticsearchRepository<Employee,String>{
	/**
	 * 查询根据id数据对象
	 * @param id
	 * @return
	 */
	Employee queryEmployeeById(String id);

	/**
	 * 查询年龄在age1和age2之间的数据
	 * @param age1
	 * @param age2
	 * @return
	 */
	Iterable<Employee> queryByAgeBetween(Integer age1,Integer age2);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤使用 Spring Boot 和 Elasticsearch 实现增删改查的功能: 1. 添加依赖:在你的 Spring Boot 项目的 pom.xml 文件中,添加 Elasticsearch 相关的依赖。例如: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 配置 Elasticsearch:在你的 application.properties 或 application.yml 文件中,配置 Elasticsearch 的连接信息。例如: ```yaml spring.data.elasticsearch.cluster-nodes=localhost:9200 ``` 3. 创建实体类:创建一个代表你要操作的数据的实体类,并使用注解来映射到 Elasticsearch 中的索引和类型。例如: ```java import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName = "your_index_name", type = "your_type_name") public class YourEntity { @Id private String id; private String name; // 其他属性和方法 } ``` 4. 创建数据访问接口:创建一个继承自 ElasticsearchRepository 的数据访问接口,该接口提供了一些基本的 CRUD 方法。例如: ```java import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface YourEntityRepository extends ElasticsearchRepository<YourEntity, String> { // 可以根据需要添加自定义的查询方法 } ``` 5. 编写业务逻辑:在你的服务类中使用 YourEntityRepository 来进行相关的数据操作。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class YourService { @Autowired private YourEntityRepository repository; public YourEntity save(YourEntity entity) { return repository.save(entity); } public void delete(String id) { repository.deleteById(id); } public Iterable<YourEntity> findAll() { return repository.findAll(); } // 可以根据需要添加其他的查询方法和业务逻辑 } ``` 这样,你就可以通过调用 YourService 中的方法来实现Elasticsearch增删改查操作了。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值