使用 Fastify 和 Elasticsearch 进行数据分析

阅读时长 10 分钟读完

1. 前言

前端的数据分析一直是我们追求的目标,然而在实际操作上还是存在很多问题的。很多前端开发者大多靠兴趣驱动,通过手写脚本和 Excel 来实现数据分析的目的,这种方法的繁琐和效率低下仍然令人不满足。那么有什么解决方案可以更好地实现前端的数据分析呢?本文将介绍如何使用 Fastify 和 Elasticsearch 进行数据分析,需要的基础知识有 JavaScript 和 Elasticsearch。

2. Fastify 和 Elasticsearch 初步了解

2.1 Fastify

Fastify 是一个功能强大的 Node.js Web 框架,专注于提供高效的 HTTP 服务器和构建 Web 应用程序 API。Fastify 基于异步 I/O 模型,可以处理大量的连接请求,是构建高效、稳定、可扩展 Web 应用程序的极佳工具。相较于其他框架,Fastify 在性能和内存方面都有很好的表现,并且提供了社区强大的插件系统,以帮助开发者快速扩展。

2.2 Elasticsearch

Elasticsearch 是一个分布式文档存储和搜索引擎,具有快速、可靠、可扩展和高效检索等特点。它通过使用 Lucene 库进行全文搜索,可以处理海量数据的查询请求,是一款非常优秀的数据存储与分析利器。

3. Fastify 和 Elasticsearch 的数据分析使用示例

为了更好的方便大家学习,这里提供了一个简单的示例案例,使用 Fastify 和 Elasticsearch 来实现一个热门文章搜索的专题页面。

我们的目标是:实现一个可视化搜索页面,能够搜索出站点上访问量最大的文章,并配合数据可视化来呈现文章排行榜。

3.1 搭建 Fastify 后端服务

首先,我们需要使用 Fastify 搭建后端 API 服务器,我们采用下面的代码,搭建一个简单的 Fastify Hello World 应用。

-- -------------------- ---- -------
----- ------- - -------------------- ------- ---- --

---------------- ----- --------- ------ -- -
  ------ - -------- ------ ------ -
--

----- ----- - ----- -- -- -
  --- -
    ----- --------------------
    ------------------------ --------- -- ----------------------------------
  - ----- ------- -
    ------------------------
    ---------------
  -
-

-------

代码解析:

  1. 引入 fastify 模块,并创建 fastify 实例。

  2. 使用 fastify.get() 方法定义一个 GET 接口,当访问 / 时,返回一个消息。

  3. 使用 await fastify.listen() 启动服务器,并监听 3000 端口。

3.2 配置 Elasticsearch 数据源

Fastify 是一个高效的 API 服务工具,但是我们要想实现更多功能,我们最好使用 Elasticsearch 存储数据。这里我们配置一下 Elasticsearch,导入数据源。

这里通过 Client 来实例化 Elasticsearch 客户端,并传递了 Elasticsearch 的节点信息。如果 Elastic 运行在本地提供的默认地址,则可以直接使用它。否则,可以根据实际情况对此进行修改。

3.3 创建 Elasticsearch 索引

接着,我们在 Elasticsearch 中创建一个索引,用于存储文章数据:

-- -------------------- ---- -------
----- ---- - -
    --------- -
      ----------- -
        ------ - ----- ------ --
        ----- - ----- ------ --
        ------- - ----- --------- --
      --
    --
  -
  ----- ------ - ----- ----------------------- ------ ----------- ---- --
  ------------------- --- - ----- ------ ----------- ---- -------- ----- - 

在这段代码中,我们首先定义了 articles 索引的结构信息,其中包含三个字段,标题、标题别名和访问次数,它是声明在 mappings 属性中,这种结构定义非常轻松和灵活。

接着,我们使用 Elasticsearch 客户端,使用 indices.create API 创建了一个名叫 articles 的索引。当我们运行这段代码时,Elasticsearch 就可以创建一个 index,用于存储文章数据了。

3.4 写入数据到 Elasticsearch

下一步,我们需要将文章的标题、标题别名和每篇文章的访问次数写入 Elasticsearch 索引。

-- -------------------- ---- -------
----- -------- - -
    - ------ -------- --- ------------- --- ---- ----------- ----- ----------------------------------------------- ------- --- --
    - ------ ------ ----------- --- ---------- ----- -------------------------------- ------- --- --
    - ------ ------ ---------- -- -------- -- ------- ----- ---------------------------------------- ------- --- --
    - ------ -- --------- ----- -- --------- ----- ------------------------------ ------- --- --
    - ------ --- --- --- ----- ------ --- ---- --------- ----- ------------------------------------------- ------- --- --
  --
  ----- ---- - ---------------------- -- -- ------ - ------- ---------- - -- ------
  ----- ------ - ----- ------------- ---- ---

在此代码示例中,我们创建了一个有限的数组,包含文章的标题、标题别名和每篇文章的访问次数。我们使用 bulk API 来将所有文章写入 Elasticsearch 中的索引。

3.5 定义搜索请求

让我们定义搜索请求,具体组成包括请求接口路由、调用 Elasticsearch 的搜索 API、将数据展示为标准的 JSON 格式返回给调用方。

-- -------------------- ---- -------
---------------------- ----- --------- ------ -- -
    ----- - - - - --------------
    ----- -------- - ----- ---------------
      ------ -----------
      ----- ---
      ----- -
        ------ -
          ------------ -
            ------ --
            ------- ----------- --------- -----------
          --
        --
        ----- -- -------- ------ ---
      --
    ---
  
    ------ -
      ----- ---------------------------- -- -------------
      ------- --------------------------
    --
  ---

这段代码的实现基本上是本篇文章的核心了,其中:

  1. 使用 fastify.get 方法来定义一个 HTTP GET 请求接口。

  2. 处理了名称为 q 的搜索请求字符串参数。

  3. 使用 client.search 方法在 Elasticsearch 中搜索文章信息。我们使用 query 来匹配关键词。此外,我们可以通过 size 参数限制返回的结果集大小,使用 sort 指定返回结果的排序规则。

  4. 最后,将结果集映射到只包含 article 的数组中。

3.6 整合前端界面

最后,我们需要我们来创建一个非常简单的 HTML 页面,包括一个输入框和一个按钮。在这里我们使用 jQuery 作为 DOM 操作和 Ajax 请求的工具。

-- -------------------- ---- -------
--------- -----
------
  ------
    ----- --------------- --
    -------------- --------------
    ------- -----------------------------------------------------------
  -------
  ------
    ----------- -----------
    ------ ----------- -------- --
    -----------------------
    ---- -------------------
    --------
      -------------------- -- -
        -------------------- -- -
          ----- ----- - -------------------------
          ------------------------------- ---------- -- -
            ----------------------
            ----------------------
            ------------------------------ ------------------ --------------
            --------------------------- -- -
              ----------------------
                ---------------------
                ------------------
                --------------------
              ---
            ---
          ---
        ---
      ---
    ---------
  -------
-------

这个页面中有一个简单的表单,其中包括输入查询词的输入框和用于响应搜索结果的 div 元素,一个按钮(click),点击后会发送一个 Ajax 请求,并将结果渲染到结果列表。

4. 总结

到此结束了,我们已通过 Fastify 和 Elasticsearch 实现了一个简单的全文搜索引擎,并使用表格方式将数据可视化呈现。这个简单的示例让我们在实践中了解了它们的用途和相关工具,也可以应用于更复杂的应用程序中,让我们拥有更多高效的工具。

源代码:Fastify and Elasticsearch for data analytics project

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65aa5465add4f0e0ff3f2025

纠错
反馈