后端:
org.springframework.boot
spring-boot-starter-data-elasticsearch
org.springframework.boot
spring-boot-starter-web
org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok 之后 构建商品的基本模型 也就是 实体类 : 因为我的es 是部署在linux 上面 因此我还需要将 对应的es 端口进行配置 :org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest org.apache.commons commons-lang3
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
@Service
public class SearchService {
@Resource private ElasticsearchRestTemplate elasticsearchRestTemplate; public Mappage(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; }
}



