写点什么

大数据 ELK(十三):Elasticsearch 编程(添加职位数据)

作者:Lansonli
  • 2022 年 10 月 05 日
    广东
  • 本文字数:1613 字

    阅读完需:约 5 分钟

大数据ELK(十三):Elasticsearch编程(添加职位数据)

Elasticsearch 编程

一、添加职位数据

1、初始化客户端连接

  • 使用 RestHighLevelClient 构建客户端连接。

  • 基于 RestClient.builder 方法来构建 RestClientBuilder

  • 用 HttpHost 来添加 ES 的节点


参考代码:


private RestHighLevelClient restHighLevelClient;private static final String JOB_IDX_NAME = "job_idx";
public JobFullTextServiceImpl() { restHighLevelClient = new RestHighLevelClient(RestClient.builder( new HttpHost("node1", 9200, "http") , new HttpHost("node2", 9200, "http") , new HttpHost("node3", 9200, "http") ));}
复制代码

2、实现关闭客户端连接

@Overridepublic void close() {    try {        restHighLevelClient.close();    } catch (IOException e) {        e.printStackTrace();    }}
复制代码

3、编写代码实现新增职位数据

实现步骤:


  • 构建 IndexRequest 对象,用来描述 ES 发起请求的数据。

  • 设置文档 ID。

  • 使用 FastJSON 将实体类对象转换为 JSON。

  • 使用 IndexRequest.source 方法设置文档数据,并设置请求的数据为 JSON 格式。

  • 使用 ES High level client 调用 index 方法发起请求,将一个文档添加到索引中。


参考代码:


@Overridepublic void add(JobDetail jobDetail) {    // 1. 构建IndexRequest对象,用来描述ES发起请求的数据。    IndexRequest indexRequest = new IndexRequest(JOB_IDX_NAME);
// 2. 设置文档ID。 indexRequest.id(jobDetail.getId() + "");
// 3. 构建一个实体类对象,并使用FastJSON将实体类对象转换为JSON。 String json = JSON.toJSONString(jobDetail);
// 4. 使用IndexRequest.source方法设置请求数据。 indexRequest.source(json);
try { // 5. 使用ES High level client调用index方法发起请求 restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); }
System.out.println("索引创建成功!");}
复制代码


常见错误:


java.lang.IllegalArgumentException: The number of object passed must be even but was [1]
at org.elasticsearch.action.index.IndexRequest.source(IndexRequest.java:474) at org.elasticsearch.action.index.IndexRequest.source(IndexRequest.java:461)
复制代码


原因:IndexRequest.source 要求传递偶数个的参数,但只传递了 1 个

4、编写测试用例测试添加方法

  • 在 test/java 目录中创建一个 cn.it.elasticsearch.service 包。

  • 在 cn.it.elasticsearch.service 包下创建一个 JobFullTextServiceTest 类。

  • 在 @BeforeTest 中构建 JobFullTextService 对象,@AfterTest 中调用 close 方法关闭连接。

  • 编写测试用例,构建一个测试用的实体类,测试 add 方法。


参考代码:


public class JobFullTextServiceTest {
private JobFullTextService jobFullTextService;
@BeforeTest public void beforeTest() { jobFullTextService = new JobFullTextServiceImpl(); }
@Test public void addTest() { // 1. 测试新增索引文档 jobFullTextService = new JobFullTextServiceImpl();
JobDetail jobDetail = new JobDetail(); jobDetail.setId(1); jobDetail.setArea("江苏省-南京市"); jobDetail.setCmp("Elasticsearch大学"); jobDetail.setEdu("本科及以上"); jobDetail.setExp("一年工作经验"); jobDetail.setTitle("大数据工程师"); jobDetail.setJob_type("全职"); jobDetail.setPv("1700次浏览"); jobDetail.setJd("会Hadoop就行"); jobDetail.setSalary("5-9千/月");
jobFullTextService.add(jobDetail); }
@AfterTest public void afterTest() { jobFullTextService.close(); }}
复制代码


发布于: 2022 年 10 月 05 日阅读数: 41
用户头像

Lansonli

关注

微信公众号:三帮大数据 2022.07.12 加入

CSDN大数据领域博客专家,华为云享专家、阿里云专家博主、腾云先锋(TDP)核心成员、51CTO专家博主,全网六万多粉丝,知名互联网公司大数据高级开发工程师

评论

发布
暂无评论
大数据ELK(十三):Elasticsearch编程(添加职位数据)_10月月更_Lansonli_InfoQ写作社区