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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值