本教程将指导您为文档构建一个相关且强大的搜索栏 🚀

运行 Meilisearch 实例

首先,在 Meilisearch Cloud 上创建一个新的 Meilisearch 项目。您也可以在本地或其他云服务上安装并运行 Meilisearch

在后续步骤中需要提供的 host URL 和 API key 对应此 Meilisearch 实例的凭证。

抓取您的内容

Meilisearch 团队提供并维护了一个抓取工具,可自动读取网站内容并将其存储到 Meilisearch 的索引中。

配置文件

爬虫工具需要一个配置文件来了解您想要抓取的内容。这是通过提供选择器(例如 html 标签)来实现的。

以下是一个基础配置文件的示例:

{
  "index_uid": "docs",
  "start_urls": [
    "https://www.example.com/doc/"
  ],
  "sitemap_urls": [
    "https://www.example.com/sitemap.xml"
  ],
  "stop_urls": [],
  "selectors": {
    "lvl0": {
      "selector": ".docs-lvl0",
      "global": true,
      "default_value": "Documentation"
    },
    "lvl1": {
      "selector": ".docs-lvl1",
      "global": true,
      "default_value": "Chapter"
    },
    "lvl2": ".docs-content .docs-lvl2",
    "lvl3": ".docs-content .docs-lvl3",
    "lvl4": ".docs-content .docs-lvl4",
    "lvl5": ".docs-content .docs-lvl5",
    "lvl6": ".docs-content .docs-lvl6",
    "text": ".docs-content p, .docs-content li"
  }
}

index_uid 字段是您 Meilisearch 实例中存储网站内容的索引标识符。如果索引不存在,爬虫工具将会创建一个新索引。

在这个示例中,docs-content 类是文本内容的主要容器。大多数情况下,这个标签是 <main><article> HTML 元素。

lvlX 选择器应该使用标准的标题标签如 h1h2h3 等。您也可以使用静态类。为这些元素设置唯一的 idname 属性。

所有位于主要文档容器之外(例如侧边栏中)的可搜索 lvl 元素必须是 global 选择器。它们将被全局捕获并注入到从您的页面构建的每个文档中。

如果您使用 VuePress 来编写文档,可以查看我们在生产环境中使用的配置文件。在我们的案例中,主容器是 theme-default-content,标题和副标题的选择器是 h1h2

更多可选字段可供使用以满足您的需求。

运行爬虫工具

您可以使用 Docker 运行爬虫工具。按照第一步设置好本地 Meilisearch 实例后,运行以下命令:

docker run -t --rm \
  --network=host \
  -e MEILISEARCH_HOST_URL='MEILISEARCH_URL' \
  -e MEILISEARCH_API_KEY='MASTER_KEY' \
  -v <absolute-path-to-your-config-file>:/docs-scraper/config.json \
  getmeili/docs-scraper:latest pipenv run ./docs_scraper config.json

如果不想使用 Docker,这里提供了其他运行爬虫工具的方式

<absolute-path-to-your-config-file> 应该是您在上一步中定义的配置文件的绝对路径。

API 密钥需要具备向 Meilisearch 实例添加文档的权限。在生产环境中,我们建议提供 Default Admin API Key,因为它具有足够的权限来执行此类请求。 了解更多关于Meilisearch 安全性的内容。

我们建议在每次部署新文档时运行爬虫工具,正如我们对 Meilisearch 官方文档所做的

集成搜索栏

如果您的文档不是 VuePress 应用,可以直接跳转到本节内容

适用于 VuePress 文档站点

如果您使用 VuePress 构建文档站点,我们提供了 Vuepress 插件。该插件已在 Meilisearch 官方文档中投入生产使用。

在您的 VuePress 项目中:

在您的 config.js 文件中配置:

module.exports = {
  plugins: [
    [
      "vuepress-plugin-meilisearch",
      {
        "hostUrl": "<your-meilisearch-host-url>",
        "apiKey": "<your-meilisearch-api-key>",
        "indexUid": "docs"
      }
    ],
  ],
}

hostUrlapiKey 字段是 Meilisearch 实例的凭据。按照本教程的说明,它们分别是 MEILISEARCH_URLMASTER_KEY

indexUid 是 Meilisearch 实例中存储网站内容的索引标识符,已在配置文件中定义。

这三个字段是必填项,但您还可以使用更多可选字段来自定义搜索栏。

由于配置文件是公开的,我们强烈建议在生产环境中使用仅能访问搜索端点的密钥,例如 Default Search API Key。 了解更多关于Meilisearch 安全机制的信息。

适用于各类文档

如果您没有使用 VuePress 来构建文档,我们提供了一个前端 SDK,可以将强大且相关的搜索栏集成到任何文档网站中。

Docxtemplater 搜索栏演示

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docs-searchbar.js@{version}/dist/cdn/docs-searchbar.min.css" />
  </head>

  <body>
    <input type="search" id="search-bar-input">
    <script src="https://cdn.jsdelivr.net/npm/docs-searchbar.js@{version}/dist/cdn/docs-searchbar.min.js"></script>
    <script>
      docsSearchBar({
        hostUrl: '<your-meilisearch-host-url>',
        apiKey: '<your-meilisearch-api-key>',
        indexUid: 'docs',
        inputSelector: '#search-bar-input',
        debug: true // 如需检查下拉框,请将 debug 设为 true
      });
    </script>
  </body>
</html>

hostUrlapiKey 字段是 Meilisearch 实例的凭证。在本教程中,它们分别是 MEILISEARCH_URLMASTER_KEY

indexUid 是存储网站内容的 Meilisearch 实例中的索引标识符,已在配置文件中定义。 inputSelector 是 HTML 搜索输入标签的 id 属性。

在生产环境中,我们强烈建议提供 Default Search API Key,这足以执行搜索请求。

了解更多关于 Meilisearch 安全性的内容。

该库的默认行为非常适合文档搜索栏,但您可能需要一些自定义配置

如需更具体的示例,可以参考这个基础 HTML 文件这个更高级的 Vue 文件

下一步

至此,您应该已经在网站上拥有了一个可用的搜索引擎,恭喜!🎉 如果您现在想要在生产环境中运行 Meilisearch,可以查看本教程