「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。
Elasticsearch Java API
客户端 文档:www.elastic.co/guide/index…
Elasticsearch的Java API客户端分为两种:
(1)原生的Java API;
(2)REST API (推荐使用);
REST API又分为两种:
(1)Java Low Level REST Client
低级客户端,采用http与es通信,对所有es版本兼容;
(2)Java High Level REST Client
高级客户端,底层封装了Java Low Level REST Client客户端,使用更方便;
Java高级REST客户端对低级客户端进行了封装,它的主要目的是公开API特定的方法,这些方法接受请求对象作为参数并返回响应对象,以便请求编码和响应解码由客户端本身处理,每个API可以同步或异步调用,同步方法返回一个响应对象,而名称以async后缀结尾的异步方法则需要一个监听器参数,一旦接收到响应或错误,该监听器就会被通知(工作在低级客户端管理的线程池上);
API文档:
artifacts.elastic.co/javadoc/org…
具体使用参考我们的示例代码;
Elasticsearch案例
基于elasticsearch模仿实现百度搜索;
1. 页面内容抓取
jsoup jsoup.org/
jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容,它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据;
jsoup的主要功能如下:
- 从一个URL,文件或字符串中解析HTML;
- 使用DOM或CSS选择器来查找、取出数据;
- 可操作HTML元素、属性、文本;
- jsoup是基于MIT协议发布的,可放心使用于商业项目;
2.数据批量插入elasticsearch
//爬取蛙课网课程数据
List<Course> courseList = CourseSpider.spider();
//批量请求
BulkRequest bulkRequest = new BulkRequest();
//es默认超时是1分钟,可以自己根据业务设置
bulkRequest.timeout(TimeValue.timeValueMinutes(1));
for (Course course : courseList) {
//把课程逐个加入到 "批量请求" 对象中
bulkRequest.add(new IndexRequest(Constants.INDEX_NAME).source(JSON.toJSONString(course), XContentType.JSON));
}
//执行请求,将数据插入es
BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
3. 文本高亮显示
//高亮显示
searchSourceBuilder.highlighter(new HighlightBuilder()
.field("courseTitle")
.field("courseIntroduce")
.field("courseTeacher")
.preTags("<span style='color:red;'>")
.postTags("</span>"));
4.搜索分页
searchSourceBuilder.from((int)startRow); //从第几条数据开始查询
searchSourceBuilder.size((int)Constants.PAGESIZE); //每次查多少条
5. kibana 删除 wkcto_course 下的所有数据的DSL
*POST wkcto_course/_delete_by_query***
*{***
*"query": {"match_all": {}}***
*}***