Elasticsearch (ES篇): Java API

248 阅读2分钟

「这是我参与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": {}}***

*}***