【ElasticSearch】SpringBoot整合ElasticSearch,基础增删查改

引入依赖

    <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-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
    </dependencies>

实体类

@AllArgsConstructor
@Document(indexName = "item")
public class Item {
    @Id
    private Long id;
    private String title; //标题
    private String category;// 分类
    private String brand; // 品牌
    private Double price; // 价格
    private String images; // 图片地址
}

Config

1、ElasticConfig

@Configuration
public class ElasticConfig {
    @Resource
    private Environment environment;

    @Bean(destroyMethod = "close")
    public RestHighLevelClient restHighLevelClient(){
        return new RestHighLevelClient(RestClient.builder(
                new HttpHost(environment.getProperty("es.host"),Integer.parseInt(environment.getProperty("es.port")),
                        environment.getProperty("es.scheme")
                )));
    }
}

2、application.yml

spring:
  data:
    elasticsearch:
      repositories:
        enabled: true
es:
  host: 120.24.240.192
  port: 9200
  scheme: http

Repository\Service

1、Repository

public interface ItemRepository extends ElasticsearchRepository<Item,String> {
}

2、Service

保存、按Id查询、查询所有、分页查询、条件查询、按Id删除

public interface ItemService {
    Optional<Item> findById(String id);

    void saveAll(List<Item> items);

    Iterable<Item> findAll();

    Page<Item> findAllByPage(PageRequest pageRequest);

    List<Item> query(String queryContent);

    void deleteById(String id);
}

3、ServiceImpl

@Service("itemService")
public class ItemServiceImpl implements ItemService{

    @Autowired
    @Qualifier("itemRepository")
    private ItemRepository itemRepository;
    
    @Autowired
    RestHighLevelClient restHighLevelClient;

    //按ID查询
    @Override
    public Optional<Item> findById(String id) {
        return itemRepository.findById(id);
    }

    //保存所有
    @Override
    public void saveAll(List<Item> items) {
        itemRepository.saveAll(items);
    }
    
    //查询所有
    @Override
    public Iterable<Item> findAll() {
        return itemRepository.findAll();
    }

    //分页查询
    @Override
    public Page<Item> findAllByPage(PageRequest pageRequest) {
        return itemRepository.findAll(pageRequest);
    }
    //条件查询
    @SneakyThrows
    @Override
    public List<Item> query(String queryContent) {
        //查询条件
        QueryBuilder matchQuery = QueryBuilders.matchQuery("title", queryContent);
        //查询创建
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(matchQuery);
        //查询条数
        sourceBuilder.size(10);
        //查询字段 第一个是需要展现的字段,第二个是需要过滤的字段
        sourceBuilder.fetchSource(new String[]{"id","title","brand"},new String[]{});
        //搜索请求
        SearchRequest searchRequest = new SearchRequest();
        //设置索引
        searchRequest.indices("item");
        //设置需要传送的json
        searchRequest.source(sourceBuilder);
        //发送请求
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        List<Item> list = new ArrayList<>();
        for (SearchHit hit :
                search.getHits()) {
            Item item = JSONObject.parseObject(hit.getSourceAsString(), Item.class);
            list.add(item);
        }
        return list;
    }

    @Override
    public void deleteById(String id) {
        itemRepository.deleteById(id);
    }


}

Test测试

@SpringBootTest
class SpringEsApplicationTests {
    @Autowired
    private ItemService itemService;

    @Test
    public void save(){
        List<Item> list = new ArrayList<>();
        for (int i=0;i<10;i++){
            Random random = new Random();
            Item item = new Item();
            item.setId(Long.valueOf(i));
            item.setBrand("品牌"+i);
            item.setCategory("类别"+i);
            item.setImages("图片"+i);
            item.setPrice(random.nextDouble());
            item.setTitle("标题"+i);
            list.add(item);
        }
        itemService.saveAll(list);
        System.out.println("success add");
    }

    @Test
    public void testFindAll(){
        Iterable<Item> items = itemService.findAll();
        items.forEach(System.out::println);
    }

    /**
     * 分页查询
     */
    @Test
    public void testFindAllByPage(){
        //排序方式 降序
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        int curr=0;//当前页 第一页0 第二页1
        int pageSize=5;//每页显示多少条
        PageRequest pageRequest = PageRequest.of(curr, pageSize, sort);
        Page<Item> itemPage = itemService.findAllByPage(pageRequest);
        itemPage.forEach(System.out::println);
    }

    @Test
    public void testQuery(){
        List<Item> query = itemService.query("4");
        query.forEach(System.out::println);
    }

    @Test
    public void testDeleteById(){
        String id="1";
        itemService.deleteById(id);
        System.out.println("success delete");
    }
}

猜你喜欢

转载自blog.csdn.net/kanseu/article/details/123848398
今日推荐