Springboot web+Sping Data Elastcsearch

Springboot 2.3.7.RELEASE

application.yml

spring:
  application:
    name: es-application
  elasticsearch:
    rest:
      uris: http://localhost:9200

pojo

package com.example.estest03.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
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;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "users")
public class User {
    @Id
    private Integer id;

    @Field(type = FieldType.Keyword)
    private String name;

    @Field(type = FieldType.Integer)
    private Integer age;

    @Field(type = FieldType.Double)
    private Double height;
}

interface

package com.example.estest03.dao;

import com.example.estest03.pojo.User;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

public interface UserRepository extends ElasticsearchRepository<User, Integer> {
    /**
     * 根据name查询
     * @param name
     * @return
     */
    List<User> findByName(String name);

    /**
     * 根据age查询
     * @param age
     * @return
     */
    List<User> findByAge(Integer age);

    /**
     * 根据height查询
     * @param height
     * @return
     */
    List<User> findByHeight(Double height);

    /**
     * 根据name和aga查询
     * @param name
     * @param age
     * @return
     */
    List<User> findByNameAndAge(String name, Integer age);

    /**
     * 分页查询,需要指定Pageable参数
     * 这里name可以有多个,或关系
     * @param pageable
     * @param names
     * @return
     */
    List<User> findByNameIn(Pageable pageable, String...names);
}

service

package com.example.estest03.service;

import com.example.estest03.pojo.User;
import org.springframework.data.domain.Pageable;

import java.util.Iterator;
import java.util.List;

public interface IElasticService {
    /**
     *  向索引中添加一个Document
     * @return
     */
    User saveDoc(User user);

    /**
     * 向索引中添加多个Document
     * @return
     */
    Iterable<User> saveDocAll(List<User> users);

    /**
     * 根据ID删除Doc
     * @return
     */
    void deletDoc(Integer id);

    /**
     * 查询所有Doc
     * @return
     */
    Iterator<User> FinAll();

    /**
     * 根据ID查询Doc
     * @return
     */
    User FinByID(Integer id);

    /**
     * 查询所有Doc后根据字段排序--升序
     * @return
     */
    Iterable<User> FindAllSortAsc(String field);

    /**
     * 查询所有Doc后根据字段排序--降序
     * @return
     */
    Iterable<User> FindAllSortDesc(String field);

    /**
     * 根据name查询
     * @param name
     * @return
     */
    List<User> findByName(String name);

    /**
     * 根据age查询
     * @param age
     * @return
     */
    List<User> findByAge(Integer age);

    /**
     * 根据height查询
     * @param height
     * @return
     */
    List<User> findByHeight(Double height);

    /**
     * 根据name和aga查询
     * @param name
     * @param age
     * @return
     */
    List<User> findByNameAndAge(String name, Integer age);

    /**
     * 分页查询,需要指定Pageable参数
     * 这里name可以有多个,或关系
     * @param pageable
     * @param names
     * @return
     */
    List<User> findByNameIn(Pageable pageable, String...names);
}

impl

package com.example.estest03.impl;

import com.example.estest03.dao.UserRepository;
import com.example.estest03.pojo.User;
import com.example.estest03.service.IElasticService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.stereotype.Service;

import java.util.Iterator;
import java.util.List;

@Service("elasticService")
public class ElasticServiceImpl implements IElasticService {
    @Autowired
    UserRepository userRepository;

    @Autowired
    ElasticsearchRestTemplate elasticsearchRestTemplate;

    @Override
    public User saveDoc(User user) {
        return userRepository.save(user);
    }

    @Override
    public Iterable<User> saveDocAll(List<User> users) {
        return userRepository.saveAll(users);
    }

    @Override
    public void deletDoc(Integer id) {
        userRepository.deleteById(id);
    }

    @Override
    public Iterator<User>  FinAll() {
        return userRepository.findAll().iterator();
    }

    @Override
    public User FinByID(Integer id) {
        return userRepository.findById(id).get();
    }

    @Override
    public Iterable<User> FindAllSortAsc(String field) {
        return userRepository.findAll(Sort.by(Sort.Order.asc(field)));
    }

    @Override
    public Iterable<User> FindAllSortDesc(String field) {
        return userRepository.findAll(Sort.by(Sort.Order.desc(field)));
    }

    @Override
    public List<User> findByName(String name) {
        return userRepository.findByName(name);
    }

    @Override
    public List<User> findByAge(Integer age) {
        return userRepository.findByAge(age);
    }

    @Override
    public List<User> findByHeight(Double height) {
        return userRepository.findByHeight(height);
    }

    @Override
    public List<User> findByNameAndAge(String name, Integer age) {
        return userRepository.findByNameAndAge(name, age);
    }

    @Override
    public List<User> findByNameIn(Pageable pageable, String... names) {
        return userRepository.findByNameIn(pageable,names);
    }
}

controller

package com.example.estest03.controller;

import com.example.estest03.pojo.User;
import com.example.estest03.service.IElasticService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Iterator;

@RestController
@RequestMapping("/elastic")
public class ElasticController {

    @Autowired
    private IElasticService elasticService;

    @GetMapping("/all")
    public Iterator<User> all(){
        return elasticService.FinAll();
    }
}

原始查询

   /**
     * 原始查询
     */
    @Test
    void query(){
        //构建查询条件
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.queryStringQuery("zhangsan和lisi"))//指定使用的查询方式
                .withSort(SortBuilders.fieldSort("age").order(SortOrder.DESC))//排序--降序
                .withPageable(PageRequest.of(0,10))//分页
                .build();

        //执行查询方法
        SearchHits<User> searchHits = elasticsearchRestTemplate.search(searchQuery, User.class);
        // for (SearchHit<User> searchHit : searchHits) {
        //     System.out.println(searchHit.getContent());
        // }

        searchHits.forEach(searchHit -> System.out.println(searchHit.getContent()));
    }
上一篇:Sping基础


下一篇:Spring+Sping MVC + Mybatis 三大框架整合详细步骤(SSM)