利用 Hapi 和 Elasticsearch 构建全文搜索引擎的实践

阅读时长 10 分钟读完

前言

全文搜索引擎是现代网站和应用程序中必不可少的一部分。它们使用户能够快速找到他们需要的信息,从而提高了用户体验和应用程序的可用性。在本文中,我们将探讨如何使用 Hapi 框架和 Elasticsearch 数据库构建一个全文搜索引擎。

Hapi 框架

Hapi 是一个 Node.js 框架,它提供了许多有用的功能,使开发人员能够轻松地构建 Web 应用程序。Hapi 提供了以下功能:

  • 路由:Hapi 允许开发人员定义路由,以便将请求映射到正确的处理程序。
  • 插件:Hapi 允许开发人员使用插件来扩展框架的功能。
  • 配置:Hapi 允许开发人员使用配置文件来管理应用程序的设置。
  • 错误处理:Hapi 允许开发人员定义错误处理程序,以便处理应用程序中的错误。
  • 缓存:Hapi 允许开发人员使用缓存来提高应用程序的性能。

Elasticsearch 数据库

Elasticsearch 是一个分布式、开源的搜索和分析引擎。它可以快速地存储、搜索和分析大量数据。Elasticsearch 使用 JSON 格式存储数据,并提供了强大的搜索和分析功能。

实践

在本节中,我们将学习如何使用 Hapi 和 Elasticsearch 构建一个全文搜索引擎。我们将使用以下技术:

  • Hapi 框架
  • Elasticsearch 数据库
  • Elasticsearch.js 客户端库

步骤 1:安装 Elasticsearch

首先,我们需要安装 Elasticsearch 数据库。您可以从 Elasticsearch 官方网站下载最新版本的 Elasticsearch。

步骤 2:安装 Elasticsearch.js

接下来,我们需要安装 Elasticsearch.js 客户端库。您可以使用 npm 包管理器来安装 Elasticsearch.js。

步骤 3:创建 Hapi 应用程序

现在,我们将创建一个 Hapi 应用程序。在您的项目目录中创建一个名为 server.js 的文件,并添加以下代码:

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

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

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

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

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

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

-------

此代码将创建一个 Hapi 服务器,并在端口 3000 上运行。运行以下命令启动服务器:

步骤 4:连接到 Elasticsearch

接下来,我们需要连接到 Elasticsearch 数据库。在 server.js 文件中添加以下代码:

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

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

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

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

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

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

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

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

-------

此代码将创建一个 Elasticsearch 客户端,并使用 ping() 方法测试连接。运行以下命令启动服务器:

访问 http://localhost:3000/,如果一切正常,您应该能够看到一个 JSON 响应。

步骤 5:索引数据

现在,我们将索引一些数据,以便可以搜索它。在 server.js 文件中添加以下代码:

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

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

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

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

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

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

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

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

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

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

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

-------

此代码将创建一个名为“articles”的索引,并将三篇文章索引到该索引中。每篇文章都有一个标题和内容。运行以下命令启动服务器:

步骤 6:搜索数据

现在,我们将搜索索引的数据。在 server.js 文件中添加以下代码:

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

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

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

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

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

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

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

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

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

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

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

-------

此代码将添加一个名为“search”的路由,该路由将接受一个名为“q”的查询参数,并使用 Elasticsearch 客户端搜索“articles”索引中的标题和内容字段。运行以下命令启动服务器:

现在,您可以使用以下 URL 搜索“articles”索引中的数据:

此 URL 将返回包含“Elasticsearch”关键字的所有文章。

结论

在本文中,我们学习了如何使用 Hapi 框架和 Elasticsearch 数据库构建一个全文搜索引擎。我们了解了如何使用 Elasticsearch.js 客户端库连接到 Elasticsearch 数据库,如何索引数据并如何搜索数据。我们希望这篇文章对您有所帮助,并为您构建自己的全文搜索引擎提供了指导。

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

纠错
反馈