栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

如何创建一个简单的es搜索

如何创建一个简单的es搜索

后端:


org.springframework.boot
spring-boot-starter-data-elasticsearch


org.springframework.boot
spring-boot-starter-web


    org.projectlombok
    lombok
    true


    org.springframework.boot
    spring-boot-starter-test
    test


    org.apache.commons
    commons-lang3

org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok 之后 构建商品的基本模型 也就是 实体类 : 因为我的es 是部署在linux 上面 因此我还需要将 对应的es 端口进行配置 :

spring:
elasticsearch:
rest:
uris: http://Ip地址:9200
server:
port: 2000

接下是构建实体类 :

以及其他创建各种基本包名:

我们需要创建一个 模拟数据 因此 在 es 先添加数据
package com.es;

import com.es.entity.Goods;
import com.es.repository.GoodsRepository;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.ArrayList;

@SpringBootTest
public class DemoApplicationTests {
@Resource
private GoodsRepository goodsRepository;

@Test
public void contextLoads() {
    ArrayList list = new ArrayList<>();
    for (int i = 0; i < 100; i++) {
      Goods goods=  Goods.builder()
                .id(i)
                .title("商品"+i)
                .price(100L)
                .image("https://img14.360buyimg.com/n0/jfs/t1/202162/26/4144/390913/612ed485Ed9dbe6bf/3e07a3652886284c.jpg")
                .build();
        list.add(goods);
    }

goodsRepository.saveAll(list);
}

}

这里的goods repository 需要我们手动创建一个接口 因此我们创建它 并继承 es 提供的类 es repository

@CrossOrigin(origins = “*”,methods = RequestMethod.GET)
@RestController
public class SearchController {

@Resource
private SearchService searchService;

@GetMapping("/search/{key}/{pageNo}/{pageSize}")
public ResponseEntity> page(
        @PathVariable("key")String key,
        @PathVariable("pageNo")Integer pageNo,
        @PathVariable("pageSize")Integer pageSize){
    try {
        Map result = searchService.page(key, pageNo, pageSize);
        return ResponseEntity.ok(result);
    } catch (Exception e) {
        Map map = new HashMap<>();
        map.put("code", "500");
        map.put("errorMsg", e.getMessage());
        //返回500
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(map);
    }


}

@Service
public class SearchService {

@Resource
private ElasticsearchRestTemplate elasticsearchRestTemplate;

public Map page(String key, Integer pageNo, Integer pageSize) {
    //判断key是否为空
    if (StringUtils.isEmpty(key.trim())) {
        throw new RuntimeException("关键字不能为空");
    }
    //创建查询条件
    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
    //添加分词查询条件
    nativeSearchQueryBuilder.withQuery(QueryBuilders.matchQuery("title",key));
    //添加分页条件
    nativeSearchQueryBuilder.withPageable(PageRequest.of(pageNo-1, pageSize));
    //执行查询
    SearchHits searchHits = elasticsearchRestTemplate.search(nativeSearchQueryBuilder.build(), Goods.class);
    //数据转换
    Map result = new HashMap<>();
    List items = searchHits.getSearchHits()
            .stream()
            .map(SearchHit::getContent)
            .collect(Collectors.toList());
    long totalHits = searchHits.getTotalHits();
    result.put("items",items);
    result.put("totalPage",(totalHits%pageSize==0)?totalHits/pageSize:totalHits/pageSize+1);
    return result;
}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/746373.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号