前言
随着互联网的不断发展,全文检索越来越成为各个领域中不可或缺的一部分。在前端领域中,我们经常需要对不同类型的文本进行搜索,如博客、新闻、产品等等。而 Elastic Search 就是一个非常好用的搜索引擎库,完美地解决了这个问题。
在本文中,我们将介绍如何使用 Express.js+Elastic Search 实现全文检索,具体包括如何快速搭建 Express.js 服务器、如何连接 Elastic Search 数据库、如何进行全文检索、如何处理搜索结果等。
准备工作
在开始实现全文检索之前,我们需要先完成以下准备工作:
- 安装 Node.js 环境(最好使用最新版);
- 安装 Express 框架、body-parser 模块和 Elastic Search 官方库;
- 创建 Express 项目。
以下是一个简单的目录结构:
-- -------------------- ---- ------- -------- -- ------ -- ------------ -- ---- -- ------------ -- --------- -- ------- -- ---------- -- ------- -- ------- -- -------- -- --------- -- ------ -- --------- -- ------- -- ---- -- --- -- -------
以上结构中,app.js 是我们的主入口文件,package.json 是我们的依赖管理文件。src 目录下包含了我们的 MVC(模型-视图-控制器)架构。controllers 目录存放处理请求的控制器模块,models 目录存放数据模型模块,routes 目录存放路由模块,views 目录存放模板引擎模板。public 目录存放静态资源。
使用 Elastic Search 进行全文检索
连接 Elastic Search 数据库
首先,我们需要连接 Elastic Search 数据库。在 app.js 文件中,添加以下代码:
const elasticsearch = require('elasticsearch'); const client = new elasticsearch.Client({ host: 'localhost:9200', log: 'trace' });
这里我们使用 Elastic Search 官方库 elasticsearch 连接数据库。
创建索引
接下来,我们需要创建一个索引,用来存储我们需要检索的数据。可以将索引看作是一张表格,其中每一行为一条数据,每一列为一个字段。
在我们的例子中,我们需要检索的数据为文章和用户,因此我们需要创建两个索引:一个索引用于存储所有的文章,另一个索引用于存储所有的用户。以下是一个简单的例子:
-- -------------------- ---- ------- -- ----- --------- ----- -------- ----------------- - ----- ------ - ----- -------------- ------ ----------- --- ------- ----- ------ ----- - ------ ---------- -------- ----------- - --- ------ ------- - ----- -------- -------------- - ----- ------ - ----- -------------- ------ -------- --- ------- ----- ------ ----- - ----- --------- -------- ----------- - --- ------ ------- -
这里我们使用 async/await 流程控制语句异步打开索引。
索引搜索
现在我们已经创建了两个索引,并且可以将文章和用户的数据写入到这些索引中了。接下来,我们需要编写搜索函数,以实现全文检索功能。以下是一个简单的例子:
-- -------------------- ---- ------- -- ------ --------- ----- -------- ------------- ----- - ----- ------ - ----- --------------- ------ ----- ----- - ------ - ------------ - ------ ------ ------- --------- ---------- - - - --- ------ ----------------- -
这里我们使用 multi_match 查询方式,在字段 title 和 content 中查找包含 query 内容的数据。
处理搜索结果
最后,我们需要将搜索结果呈现给用户。我们可以使用 EJS 模板引擎来动态生成页面。EJS 是一个简单、灵活的模板引擎,可通过嵌入 JavaScript 代码动态生成 HTML。
以下是一个简单的例子:
// Render search result router.get('/search', async function (req, res) { const query = req.query.q; const type = req.query.type; const data = await search(query, type); res.render('index', { title: 'Search Result', data: data }); });
这里我们使用 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