⚠️
本指南适用于 Strapi v3。如果您使用的是 Strapi v4,请查看这篇文章

随着网络的发展,越来越多的工具可以帮助我们完成复杂的任务。为什么从头开始创建一个 CRUD API,当您可以通过几次点击来生成一个 API 呢?为什么在有简单高效的解决方案的情况下,还要为困难的搜索操作和查询而苦恼?

也许我们害怕新技术,或者担心在不起作用的工具上浪费时间。或者,更可能的是,*我们可能甚至没有意识到存在一个简单的解决方案*。

Meilisearch 在行动

本教程将向您展示如何在尽可能少的步骤内使用 Strapi 和 Meilisearch 创建一个基于搜索的 Web 应用程序。首先,让我们了解一下我们的工具!

介绍我们的工具

Strapi

Strapi 是一个无头 CMS。它提供了一种快速创建后端的方法,我们可以在其中添加和存储数据。然后,这些数据可以通过 REST API 获取,而无需编写任何代码或配置数据库。

Meilisearch

Meilisearch 是一款快速、开源的搜索引擎,易于使用和部署。Meilisearch 的目标是在很少的步骤内,无需任何配置,就能创建出相关的搜索体验。

要求

要能够完成本教程,您需要以下内容:

  • 一个开放的终端或命令提示符
  • Node.js >= 10.16 且 <= 14:这使它能够在浏览器外部运行 JS
    • 您可以使用命令 node --version 检查活动版本
    • 如果您的 Node 版本超出此范围,我们建议您安装 nvm 并使用它访问 Node 14
  • NPM 和 NPX >= 6.x(与 Node.js 一起安装):帮助您访问和使用 JS 库的包管理器

步骤

  1. 创建一个工作目录
  2. 创建 Strapi 后端
  3. 启动 Meilisearch
  4. 连接 Strapi 和 Meilisearch
  5. 结论

为我们的应用程序创建一个目录

我们不希望我们的应用程序散布在各处!让我们创建一个目录,我们将在其中添加应用程序的每个部分。

mkdir my-app
cd my-app

如果您没有使用基于 UNIX 的操作系统,请按照本指南创建目录

使用 Strapi 创建后端

在本节中,我们将使用 Strapi 创建和运行一个后端。

我们的第一步是生成一个 Strapi 应用程序。转到您的打开的终端窗口,并运行以下命令

npx create-strapi-app@3.5.4 back --quickstart
👉
使用npx,我们运行包的特定版本,而无需全局安装它。请注意,本指南可能不适用于其他版本。

此命令在名为 back 的新目录中创建一个 Strapi 应用程序,并打开管理仪表板。创建一个帐户或登录,以便您拥有访问权限。

如果您在任何时候丢失了此页面,只需在浏览器中转到 http://localhost:1337/admin

创建帐户后,您应该被重定向到 Strapi 的管理仪表板。在这里我们将配置我们的后端 API。

我们的下一步是创建一个新的集合类型——在本例中,它将是餐厅集合。完成Strapi 快速入门指南的步骤 3 以继续。

管理仪表板登陆页面

完成Strapi 快速入门指南的步骤 3 后,一个名为 Restaurants 的新集合应该出现在 Collection Types 下。如果我们点击它,我们可以看到还没有餐厅。让我们添加一些!

Restaurants 集合登陆页面

点击仪表板右上角的 + Add New Restaurants。现在让我们一个一个地添加三家餐厅

  • 名称:The Butter Biscotte。描述: 全都是黄油,没有健康。
  • 名称:The Slimy Snail 描述:美食是由大蒜和黄油制成的。
  • 名称:The Smell of Blue 描述:蓝纹奶酪没有过期,而是你如何食用它的方式。用一点黄油和很多幸福。
在餐厅集合中创建一个条目。

对于每家餐厅,您需要按 save,然后按 publish。添加完三家餐厅后,您应该看到以下页面

Restaurants 的主页面,展示我们添加的餐厅

我们的 Strapi 后端现在已经启动并运行!Strapi 自动为我们的 Restaurants 集合创建了一个 REST API。查看 Strapi 的文档以了解所有可用的API 端点

接下来,是时候将 Meilisearch 融入其中了。

启动和开始 Meilisearch

tl;dr: 下载、安装并启动 Meilisearch

想要避免本地安装?使用我们的Meilisearch 云 免费 14 天试用版,或者使用我们DigitalOcean 上的一键安装,然后继续到下一节

如果您走到这一步,您应该已经有一个运行 Strapi 的打开的终端窗口。如果没有,或者您不小心关闭了它,请按照本指南操作,导航到我们创建的 .../my-app/back 目录,并运行命令 npm run develop 以重新启动 Strapi。

让我们花点时间**打开第二个终端窗口**并移动到 my-app 目录。此窗口将用于运行 Meilisearch。

my-app 内,创建一个名为 meilisearch-binary 的新目录。

mkdir meilisearch-binary
cd meilisearch-binary
创建并移动到我们将运行 Meilisearch 的目录

执行以下命令,将 Meilisearch 下载到当前目录。如果 cURL 对您不起作用,请考虑尝试使用其他方法之一下载和安装 Meilisearch。

# Install Meilisearch
curl -L https://install.meilisearch.com | sh
下载并安装 Meilisearch

现在,我们在目录中拥有 meilisearch 二进制文件。让我们运行它!

# Launch Meilisearch
./meilisearch
启动 Meilisearch

您应该看到一大块文本(包括一些 ASCII 艺术),确认 Meilisearch 已启动并运行。

运行 Meilisearch

找到标题为 Server listening on 的行。这让我们知道 Meilisearch 在哪里提供服务。找到它后,在您的浏览器中打开此地址。

您应该到达一个网页,但没有太多内容可供查看。

带有空索引的 Meilisearch 网页界面

这是 Meilisearch 的网页界面。在我们向 Meilisearch 实例添加一些数据之前,它将保持为空。

您说的是数据?恰好我们已经在 Strapi 应用程序中有一些数据!是时候将两者连接起来,并开始使用 Meilisearch 搜索我们的数据了。

连接 Strapi 和 Meilisearch

为了将 Meilisearch 插件添加到 Strapi,我们需要退出 Strapi 应用程序。转到运行 Strapi 的终端窗口(*确保它不是运行 Meilisearch 的那个!*)并按 control + c 结束进程。

完成后,移动到 back 目录并安装插件。

cd back
npm install strapi-plugin-meilisearch

安装完成后,我们需要在以开发模式重新启动 Strapi 之前重建 Strapi 应用程序,因为这样更容易配置。

npm run build
npm run develop

此时,我们的 Strapi 应用程序应该再次在默认地址上运行:http://localhost:1337/admin/。在浏览器中访问它,您应该看到一个管理登录页面;输入与之前相同的凭据。

连接后,您应该在屏幕左侧看到一个新的 Plugin:Meilisearch!让我们点击它。

到达 Meilisearch 插件页面后,我们可以看到信息被分成两个部分

  • Meilisearch 凭据
  • Strapi 集合
Strapi 管理仪表板的 Meilisearch 插件页面

首先,我们需要添加 Meilisearch 实例的凭据,以便 Strapi 知道将我们的数据发送到哪里。

您可能记得,在前面的步骤中,Meilisearch 默认在 http://localhost:7700 上运行。将它添加到 Meilisearch Host 字段中,然后点击 Add 将您的 Meilisearch 实例连接到 Strapi。 

向 Meilisearch 添加凭据。
请注意,我们保留 Meilisearch Api Key 为空,因为我们是在没有主密钥的情况下启动 Meilisearch 的。

太好了!现在是时候将您的 Strapi 集合添加到 Meilisearch 了。

尝试点击 restaurant 旁边的复选框,并观察 Meilisearch 如何立即开始处理您的数据。因为我们只有三个文档,所以索引时间几乎不存在。

将餐厅添加到 Meilisearch

现在我们可以返回到 Meilisearch 主机地址:http://localhost:7700。刷新后,您应该会注意到该页面不再像之前那样空了。

Meilisearch 的演示页面

我们做到了!尝试输入 "butter" 并查看结果。

前端界面

使用instant-meilisearch,您可以在ReactVueAngular 中快速实现前端搜索界面。

这是一个交互式的代码沙箱(在 React 中),您可以在其中体验不同的组件。您无法破坏任何东西,所以请随意尝试!

结论

我希望这篇文章能很好地介绍Strapi 的 Meilisearch 插件。但是,这仅仅是开始!

如果您有任何问题,请加入我们Discord。如果您喜欢 Meilisearch,在 GitHub 上加一颗星表示很多。有关更多信息,请参阅我们的