修改配置文件
server:
port: 9090
spring:
thymeleaf:
cache: false
导入依赖
编写前端页面index.html4.0.0 org.springframework.boot spring-boot-starter-parent 2.2.5.RELEASE com.xys jingdongfind 0.0.1-SNAPSHOT jingdongfind Demo project for Spring Boot 1.8 7.6.1 org.jsoup jsoup 1.10.2 com.alibaba fastjson 1.2.62 org.springframework.boot spring-boot-starter-data-elasticsearch org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true org.springframework.boot spring-boot-configuration-processor true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok
狂神说Java-ES仿京东实战
编写工具类HtmlParseUtil
@Component
public class HtmlParseUtil {
public ArrayList parseJD(String keywords) throws Exception {
//获取请求https://search.jd.com/Search?keyword=/前提,需要联网!
//解析网页。(Jsoup返回document就是浏览器document对象)
String url = "https://search.jd.com/Search?keyword="+keywords;
//所有你在js中可以使用的方法,这里都能用!
document document = Jsoup.parse(new URL(url),30000);
//获取所有的Li元素
Element element = document.getElementById("J_goodsList");
//获取元素中的内容, 这里eL就是每一个Li标签了 !
Elements elements = element.getElementsByTag("li");
ArrayList goodList=new ArrayList<>();
for (Element el : elements) {
String img = el.getElementsByTag("img" ).eq(0).attr("data-lazy-img");
String price = el.getElementsByClass("p-price").eq(0).text();
String title = el.getElementsByClass("p-name").eq(0).text();
Content content=new Content();
content.setTitle(title);
content.setImg(img);
content.setPrice(price);
goodList.add(content);
}
return goodList;
}
}
编写配置层ElasticSearchConfig
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
return client;
}
}
编写实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Content implements Serializable {
private String title;
private String img;
private String price;
}
编写服务层ContentService
@Service("ContentService")
public class ContentService {
@Autowired
@Qualifier("restHighLevelClient")
RestHighLevelClient client;
//1.解析数据放入es索引
public Boolean ContentParse(String keywords) throws Exception{
List contents=new HtmlParseUtil().parseJD(keywords);
//把查询到的数据放入es中
BulkRequest bulkRequest=new BulkRequest();
bulkRequest.timeout("2m");
for (int i = 0; i < contents.size(); i++) {
bulkRequest.add(
new IndexRequest("jd_goods")
.source(JSON.toJSONString(contents.get(i)), XContentType.JSON));
}
BulkResponse bulkResponse=client.bulk(bulkRequest, RequestOptions.DEFAULT);
return !bulkResponse.hasFailures();
}
//2.获取这些数据实现搜索功能
public List
编写控制层
@Controller
public class IndexController {
@GetMapping({"/","/index"})
public String index(){
return "index";
}
}
@RestController
public class ContentController {
@Autowired
ContentService service;
@GetMapping("/parse/{keyword}")
public Boolean parse(@PathVariable("keyword") String keyword) throws Exception{
return service.ContentParse(keyword);
}
@GetMapping("/search/{keyword}/{pageNo}/{pageSize}")
public List> search(@PathVariable("keyword") String keyword,
@PathVariable("pageNo") int pageNo,
@PathVariable("pageSize") int pageSize) throws Exception {
service.ContentParse(keyword);
return service.searchHighPage(keyword,pageNo,pageSize);
}
}



