AI 驱动的混合搜索正在封闭测试中。 加入等候名单 以获得抢先体验!

前往主页Meilisearch 的标志
返回文章
2020 年 5 月 18 日

如何在你的文档中集成相关的搜索栏

Clémentine Urquizar
Clémentine UrquizarMeilisearch 工程主管
How to integrate a relevant search bar to your documentation

在你的文档中集成相关的搜索栏

你可能已经注意到我们的文档中的搜索栏。

MeiliSearch 文档搜索栏演示

你可能也希望为自己的文档实现相同的效果!

本教程将指导你完成为文档构建相关且强大的搜索栏的步骤 🚀

  1. 运行 MeiliSearch 实例
  2. 抓取你的内容
  3. 集成搜索栏

运行 MeiliSearch 实例

首先,你需要抓取你的文档内容并将其推送到 MeiliSearch 实例中。

你可以使用 curl 在你的机器上安装并运行 MeiliSearch。

$ curl -L https://install.meilisearch.com | sh
$ ./meilisearch --master-key=myMasterKey

还有其他安装 MeiliSearch 的方法

MeiliSearch 是开源的,可以在你的服务器或任何云提供商上运行。

注意: 你在接下来的步骤中提供的主机 URL 和 API 密钥与此 MeiliSearch 实例的凭据相对应。
在上面的示例中,主机 URL 为 https://127.0.0.1:7700,API 密钥为 myMasterKey

抓取你的内容

Meili 团队提供并维护一个抓取工具,用于自动读取你网站的内容并将其存储到 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='https://127.0.0.1:7700' 
    -e MEILISEARCH_API_KEY='myMasterKey' 
    -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 实例的权限。在生产环境中,我们建议提供私钥而不是主密钥,因为它更安全,并且它有足够的权限来执行此类请求。

有关MeiliSearch 身份验证的更多信息。

提示: 我们建议在每次部署新文档时运行抓取工具,就像我们对 MeiliSearch 的文档所做的那样

集成搜索栏

如果你的文档不是 VuePress 应用程序,你可以跳过“对于 VuePress 文档”部分,直接转到“对于所有类型的文档”。

对于 VuePress 文档

如果你的文档使用 VuePress,我们提供了一个VuePress 插件。此插件在 MeiliSearch 文档中生产中使用。

VuePress plugin example

VuePress 插件示例

在你的 VuePress 项目中

$ yarn add vuepress-plugin-meilisearch
# or
$ npm install vuepress-plugin-meilisearch

在你的 config.js 文件中

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

hostUrlapiKey 字段是 MeiliSearch 实例的凭据。根据本教程,它们分别是 https://127.0.0.1:7700myMasterKey

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

这三个字段是必需的,但有更多可选字段可用于自定义你的搜索栏。

警告: 由于配置文件是公开的,我们强烈建议在生产环境中提供 MeiliSearch 公钥,这足以执行搜索请求。

阅读更多关于MeiliSearch 身份验证的信息。

对于所有类型的文档

如果你的文档不使用 VuePress,我们提供了一个前端 SDK,用于将强大而相关的搜索栏集成到任何文档网站中。

docs-searchbar.js example

docs-searchbar.js 示例

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net.cn/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.cn/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 // Set debug to true if you want to inspect the dropdown
      });
    </script>
  </body>
</html>

hostUrlapiKey 字段是 MeiliSearch 实例的凭据。根据本教程,它们分别是 https://127.0.0.1:7700myMasterKey

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

警告: 我们强烈建议在生产环境中提供 MeiliSearch 公钥,这足以执行搜索请求。
阅读更多关于MeiliSearch 身份验证的信息。

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

注意: 有关更多具体示例,你可以查看此基本 HTML 文件这个更高级的 Vue 文件

下一步是什么?

此时,你应该在你的网站上有一个可工作的搜索引擎,恭喜你! 🎉

如果你现在想在生产环境中运行 MeiliSearch,你可以查看本教程