了解完基本的索引以及文档的增删改查,接下来该实战搞一搞了,老样子,打开该打开的
想要实现搜索,必须先有数据,第一步,通过网络爬虫获取京东的一些书籍数据:
通过下面代码,获取到书籍网站的 img 信息,price 信息,title 信息,网站如下:https://search.jd.com/Search
@Component
public class HtmlParseUtil {
// public static void main(String[] args) throws IOException {
// new HtmlParseUtil().parseJd("vue").forEach(System.out::println);
// }
public List parseJd(String keyswords) throws IOException {
// 获取请求
String url = "https://search.jd.com/Search?keyword=" + keyswords;
// 解析网页
document document = Jsoup.parse(new URL(url), 30000);
Element element = document.getElementById("J_goodsList");
// System.out.println(element);
// 获取所有的 li 元素
Elements elements = element.getElementsByTag("li");
List list = 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();
list.add(new Content(title, img, price));
}
return list;
}
}
别忘了定义实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Content {
private String title;
private String img;
private String price;
}
获取到数据以后,需要通过之前添加文档的方式,添加到 elasticSearch:
// 1、解析数据,放入 es 中
public Boolean parseContent(String keywords) throws IOException {
List contentList = new HtmlParseUtil().parseJd(keywords);
// 把查询的数据插入 es 中
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("2m");
for (int i = 0; i < contentList.size(); i++) {
bulkRequest.add(new IndexRequest("js_good")
.source(JSON.toJSONString(contentList.get(i)), XContentType.JSON));
}
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
return bulk.hasFailures();
}
添加完以后,打开 elasticSearch 查看数据库信息:如下表示能够爬取到数据,并且能够添加到数据库
然后就进入正文,结合前端界面,实现数据的搜索
首先整合前端 vue
`
- Java
- 前端
- Linux
- 大数据
- 理财
{{result.price}}
{{result.title}}
店铺: Java月成交999笔 评价 3
`后端的代码:
controller 层,有分页信息,还有关键字
@GetMapping("/search/{keyword}/{pageNo}/{pageSize}")
public List
service 层:
// 获取数据实现搜索
public List
完成代码看结果:
需要注意,搜索的结果必须数据库里存在才行,就是是说,想要搜什么内容,都需要先去爬虫爬取数据,然后再搜索,如下 elasticsearch 里面只有 java 和 vue 的一些数据,所以只能收到这两个



