npm 包 gatsby-plugin-lunr-search 使用教程

阅读时长 7 分钟读完

简介

在现代 Web 应用中,搜索是一种非常常见的功能。针对静态网站而言,按照往常的做法,需要通过手动构建一个搜索索引,依赖于一个现成的搜索解决方案。而 GatsbyJS 就是一个可以生成静态网站的前端框架,它提供了一些有趣的解决方案来构建和优化您的静态网站,比如使用 GatbyJS 的 gatsby-plugin-lunr-search 插件来构建搜索索引。

gatsby-plugin-lunr-search 是通过使用 Lunr.js 的内存搜索功能打造出一个完全在客户端上使用的网站搜索系统。它会通过只在构建时生成用于索引的 JSON 数据,而不是像其他网站搜索一样通过后端根据用户的请求进行搜索。这个插件可以在构建过程中生成搜索索引,然后将索引 JSON 文件(通常命名为 search_index.json) 连同静态文件一起托管到网站服务器上,并在客户端访问时直接搜索 JSON 文件完成。也就是说,不再需要服务器端进行搜索,不会因为搜索请求过于频繁而导致服务器的负载增大,同时也更加省去了后端服务器的维护和扩展。

安装

使用 npmyarn 安装:

插件设置

gatsby-config.js 文件中添加以下配置:

-- -------------------- ---- -------
-------------- - -
    -------- -
        -- --- ----- --------
        -
            -------- ----------------------------
            -------- -
                -- --------- ------
                ------- --------- --------

                -- -------- ------
                ---------- -
                    --------------- -
                        ------ ------ -- -----------------------
                        ----- ------ -- ---------------------
                        ----- ------ -- -----------------
                    --
                --
                --------- -------------------- -- ------ ---- ----- -------- -- --------------------
            --
        --
    --
--

上述示例中,我们将 gatsby-plugin-lunr-search 添加到了我们的项目中。我们还在 options 对象下指定了必须索引的字段,和可选的索引字段。还可以通过 resolvers 指定如何从每个节点中提取标题、内容的字段值等,以及索引 JSON 文件的名称,最终搜索输出结果在 json 中。

使用

安装和配置好插件后,我们现在就可以开始使用它来构建搜索索引,并在我们的 GatsbyJS 网站上启用完整的搜索体验:

-- -------------------- ---- -------
------ ----- ---- --------
------ - ----- ------- - ---- ---------
------ - ----- - ---- -------
------ ------ ---- -----------------------

----- ---------- ------- --------------- -
    ------------------ -
        -------------
        ---------- - -
            ------ ---
            -------- ---
        --
    -

    ------------------- -
        ----- -------------- - ---------------------------------------------- ---- -- -- -
            ------ -
                --- --------
                ------ -----------------------
                ----- ---------------------
                ----- -----------------
            --
        ---
        ---------- - --------------------------------------------------
        --------------- -------------- ---
    -

    -------- -
        ------ -
            --------
                ---------- ------------
                ------ ----------- ------------------------ ---------------------- --
                ----
                    ------------------------------ -- -
                        ------ -
                            --- --------------
                                ----- ----------------------------------
                            -----
                        --
                    ---
                -----
            ---------
        --
    -

    ------ - ------- -- -
        ----- ----- - -------------------
        ----- ------- - ------------------------------- --- -- -- -
            ------ ------------------------------------ -- ------ --- -----
        ---
        --------------- ------ ------- ---
    --
-

------ ------- -----------

------ ----- --------- - --------
    ----- ---------------- -
        ---- -
            ------------ -
                -----
            -
        -
        --------------- -
            -----
        -
        ----------------- -
            ----- -
                ---- -
                    --
                    ------ -
                        ----
                    -
                    ----------- -
                        -----
                    -
                    ---------------
                -
            -
        -
    -
--

在上面的代码中,我们在页面的 componentDidMount() 生命周期函数内将从 GraphQL 查询中获取的 Markdown 中的节点转化为可搜索的 JSON 格式,然后通过 Index.load() 函数将其加载到 Lunr 索引中。在调用 search() 方法时,Lunr 将返回匹配查询的文档。在我们的搜索页面上,我们使用这些搜索结果(文档)来构建一个简单的无序列表。

结论

gatsby-plugin-lunr-search 插件提供了一个简单但高效的方法来添加一流的搜索体验到您的 GatsbyJS 网站中。使用它能够使您节省服务器资源并显著提高搜索性能,同时也能够节省您的维护时间,使您的网站更加智能。大家可以在自己的项目上实施它,并在他们的用户中获得一流的搜索体验。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f81238a385564ab6b6b

纠错
反馈