在现代的网站和应用中,全文检索是一项非常重要的功能。为了实现这个功能,我们通常需要将数据存储在一个搜索引擎中,并编写一个可搜索数据的界面。
在本文中,我们将介绍如何使用 Fastify 和 Elasticsearch 来实现全文检索功能。我们将以一个简单的示例为例,该示例将搜索电影数据。以下是我们将开发的搜索引擎的主要功能:
- 根据关键字搜索电影。
- 可以过滤电影,比如按年份、类型、演员等。
- 支持分页。
- 显示电影的详细信息,包括演员、导演、类型、年份等。
准备工作
在开始编写代码之前,您需要安装以下软件:
- Node.js
- Elasticsearch
您还需要安装适当的 Elasticsearch 客户端。在本教程中,我们将使用官方的 Elasticsearch JavaScript 客户端。
要安装此客户端,请打开终端并运行以下命令:
--- ------- -------------
创建 Fastify 应用程序
首先,我们将创建一个 Fastify 应用程序。在您的项目根目录中创建一个名为 server.js
的文件。然后在该文件中编写以下代码:
----- ------- - -------------------- ------- ---- --- ---------------- ----- --------- ------ -- - ------ - ------ ------- -- --- ----- ----- - ----- -- -- - --- - ----- --------------------- ------------------------ --------- -- ----------------------------------- - ----- ----- - ----------------------- ---------------- - -- --------
此代码将创建一个简单的 Fastify 应用程序,并将 HTTP GET 请求映射到根 URL。您可以通过在终端中运行以下命令来启动 Fastify 应用程序:
---- ---------
现在您可以打开浏览器并访问 http://localhost:3000,将看到 "hello: world" 输出到页面中。
创建 Elasticsearch 索引
接下来,我们需要创建 Elasticsearch 索引来存储我们的电影数据。在终端中运行以下命令创建一个名为 movies
的索引:
---- ---------- --------- --- ------------------------------ - -------- -------------- ----------------- - ---------- -- ---------- - - ------------------ - - -- ---------- - - ------------ - - ------- - - ------ - ------ -- ------ - - ------ - --------- -- -------- - - ------ - ------ -- ---------- - - ------ - ------ -- -------- - - ------ - ------ -- ------ - - ------ - ------ - - - --
此命令将创建一个名为 movies
的索引和它所需的属性。在本示例中,我们将存储电影的标题,年份,类型,导演,演员和梗概。每个字段都被定义为文本类型,因为我们需要对这些字段进行全文搜索。
当您运行此命令时,您应该会收到以下响应:
-----------------------------------------------------------------
插入示例数据
现在我们已经有了一个索引,接下来,我们需要向 Elasticsearch 中插入一些示例数据。在终端中运行以下命令:
---- ---------- --------- ---- ----------------------------------- - -------- -------------- ----------------- - ---------- -- -------- ---- --------- ------------ ------- ----- --------- ---------- ----------- ------ ---------- --------- ----- --------- ------- ---------- ------- ---- ---------- --- ---- ---- - ------ -- ------ ------- ------ --- -------- ---------- ------- ---- -- ------ --------- -- ---- ---------- --------- ---- ----------------------------------- - -------- -------------- ----------------- - ---------- -- -------- ---- ----------- ------- ----- --------- --------- --------- ----------- -------- ---- --------- --------- -------- -------- --- -------- ------ ------- ------- ---- ----- --------- -- -- --------- ----- ------- --------- ------- -- --- ----------- ------ -- --- --------- ----- --
此命令将添加两个电影标题 "The Shawshank Redemption" 和 "The Godfather"。
配置 Elasticsearch 客户端
接下来,我们需要配置 Elasticsearch 客户端。在 server.js
文件中添加以下代码:
----- ------ - --- -------- ----- ------------------------ ---- -------- --- --------------------------------- --------
此代码将创建一个 Elasticsearch 客户端,并将其交由 Fastify 应用程序。现在我们可以使用 client 进行 Elasticsearch 相关的所有操作。
执行搜索操作
现在我们已经准备好了所有内容,我们需要执行实际的搜索操作。我们将使用 Elasticsearch 提供的 Query DSL 来构建我们的查询。
在 server.js
文件中添加以下代码:
---------------------- ----- --------- ------ -- - ----- - -- ----- ------ ------ - - -------------- ----- ---- - ----- - -- - ------ ----- ---- - - ----- ----- ------ ------ - ----- - ----- - ------------ - ------ -- ------- ----------- ----------- -------- -- -- -- -- -- -- -------- - ----- ----- ------ - ------------------ ---------------------- - - ----- - ------ ----- - -- - ----- - ----- ------ - - ----- ------------------------------ ------ --------- ----- --- ----- ------ - -------------------------- -- ------------- ------ - ------ -- ---
此代码将创建一个 /search
端点,该端点接受包含以下参数的 GET 请求:
q
:要搜索的查询关键词。page
:要返回的结果页码。limit
:每页要返回的结果数。filter
:要应用的筛选器,例如year:1994
。
此代码将使用上述参数构建一个查询,然后将该查询发送到 Elasticsearch。查询将返回匹配查询关键词的文档。
完整代码
----- ------- - -------------------- ------- ---- --- ----- - ------ - - ------------------------- ----- ------ - --- -------- ----- ------------------------ ---- -------- --- --------------------------------- -------- ---------------- ----- --------- ------ -- - ------ - ------ ------- -- --- ---------------------- ----- --------- ------ -- - ----- - -- ----- ------ ------ - - -------------- ----- ---- - ----- - -- - ------ ----- ---- - - ----- ----- ------ ------ - ----- - ----- - ------------ - ------ -- ------- ----------- ----------- -------- -- -- -- -- -- -- -------- - ----- ----- ------ - ------------------ ---------------------- - - ----- - ------ ----- - -- - ----- - ----- ------ - - ----- ------------------------------ ------ --------- ----- --- ----- ------ - -------------------------- -- ------------- ------ - ------ -- --- ----- ----- - ----- -- -- - --- - ----- --------------------- ------------------------ --------- -- ----------------------------------- - ----- ----- - ----------------------- ---------------- - -- --------
结论
在本教程中,我们已经使用 Fastify 和 Elasticsearch 创建了一个简单的全文搜索引擎。我们了解了如何:
- 创建 Elasticsearch 索引。
- 插入一些示例数据。
- 配置 Elasticsearch 客户端。
- 执行搜索操作。
您可以在此示例代码的基础上继续构建您自己的全文搜索功能。如果您想了解有关 Elasticsearch 高级查询功能的更多信息,请参阅官方文档。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67243ea22e7021665e12c1df