使用 Express.js+Elastic Search 实现全文检索

阅读时长 6 分钟读完

前言

随着互联网的不断发展,全文检索越来越成为各个领域中不可或缺的一部分。在前端领域中,我们经常需要对不同类型的文本进行搜索,如博客、新闻、产品等等。而 Elastic Search 就是一个非常好用的搜索引擎库,完美地解决了这个问题。

在本文中,我们将介绍如何使用 Express.js+Elastic Search 实现全文检索,具体包括如何快速搭建 Express.js 服务器、如何连接 Elastic Search 数据库、如何进行全文检索、如何处理搜索结果等。

准备工作

在开始实现全文检索之前,我们需要先完成以下准备工作:

  1. 安装 Node.js 环境(最好使用最新版);
  2. 安装 Express 框架、body-parser 模块和 Elastic Search 官方库;
  3. 创建 Express 项目。

以下是一个简单的目录结构:

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

以上结构中,app.js 是我们的主入口文件,package.json 是我们的依赖管理文件。src 目录下包含了我们的 MVC(模型-视图-控制器)架构。controllers 目录存放处理请求的控制器模块,models 目录存放数据模型模块,routes 目录存放路由模块,views 目录存放模板引擎模板。public 目录存放静态资源。

使用 Elastic Search 进行全文检索

连接 Elastic Search 数据库

首先,我们需要连接 Elastic Search 数据库。在 app.js 文件中,添加以下代码:

这里我们使用 Elastic Search 官方库 elasticsearch 连接数据库。

创建索引

接下来,我们需要创建一个索引,用来存储我们需要检索的数据。可以将索引看作是一张表格,其中每一行为一条数据,每一列为一个字段。

在我们的例子中,我们需要检索的数据为文章和用户,因此我们需要创建两个索引:一个索引用于存储所有的文章,另一个索引用于存储所有的用户。以下是一个简单的例子:

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

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

这里我们使用 async/await 流程控制语句异步打开索引。

索引搜索

现在我们已经创建了两个索引,并且可以将文章和用户的数据写入到这些索引中了。接下来,我们需要编写搜索函数,以实现全文检索功能。以下是一个简单的例子:

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

这里我们使用 multi_match 查询方式,在字段 title 和 content 中查找包含 query 内容的数据。

处理搜索结果

最后,我们需要将搜索结果呈现给用户。我们可以使用 EJS 模板引擎来动态生成页面。EJS 是一个简单、灵活的模板引擎,可通过嵌入 JavaScript 代码动态生成 HTML。

以下是一个简单的例子:

这里我们使用 Express 框架来处理客户端请求,然后调用 search 函数进行全文检索,最后通过 res.render 函数将搜索结果渲染到 index 页面中。

示例代码

完整的源码可以在我的 GitHub 上找到:https://github.com/JasonLee-NN/full-text-search-by-express-elasticsearch

总结

经过以上的介绍,我们已经可以使用 Express.js+Elastic Search 来进行全文检索了。在实际应用中,我们需要做更多的工作,如对搜索结果进行分类、筛选、排序等。本文只是一个入门教程,希望能对大家有所帮助。

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

纠错
反馈