【问题标题】:Gatsby Contentful search盖茨比内容搜索
【发布时间】:2018-10-14 02:55:22
【问题描述】:

我有一个使用 Contentful 的 Gatsby 项目。很好 - 例如,我可以检索博客并显示它们。

但是,如果我想提供一种搜索工具来搜索潜在的 1000 条帖子并显示相关结果 - 我该怎么做?

我什至不知道如何开始这个 - 大概“结果页面”将是一个不同的路由,因为当前路由已经被解析为一个静态文件 - 但我不确定当 Gatsby 时我将如何路由它已经有路由了。

有人有这个的入门模板吗?有一个就好了!

谢谢

【问题讨论】:

    标签: gatsby contentful


    【解决方案1】:

    解决这个问题的方法很少;

    1. 使用像 elesticlunr 这样的库进行离线搜索,但这需要您在构建时创建索引。

    还好可以使用gatsby-plugin-elasticlunr-search插件实现。

    在你的gatsby-config.js

    module.exports = {
        plugins: [
            {
                resolve: `@andrew-codes/gatsby-plugin-elasticlunr-search`,
                options: {
                    // Fields to index
                    fields: [
                        'title',
                        'description',
                    ],
                    // How to resolve each field's value for a supported node type
                    resolvers: {
                        // For any node of type MarkdownRemark,
                        // list how to resolve the fields' values
                        ContentProduct: {
                            title: node => node.title,
                            description: node => node.description,
                        },
                    },
                },
            },
        ],
    };
    
    1. 如果您的网站类型是在线文档,您可以使用Algolia docs 功能。

    Agolia 会自动抓取 DOM 并构建搜索索引,您剩下要做的就是:构建一个界面来呈现 search results

    1. 使用 Algolia 并在构建时收集搜索索引并将其上传到 Algolia,然后猜猜看:plugin 就是为此。

    【讨论】:

    • 感谢哈立德。不确定我是否完全得到了解析器,但我会调查它。但这是否基本上意味着将整个博客列表下载到客户端?这不会有问题吗?另外,如果假设我想要静态生成的大部分站点,但也可能想要一个根据您的授权显示结果的页面,我怎么能在一个项目中混合这两种类型。例如,产品页面可能是静态的,但我的订单页面是动态的。我如何将标准 React Router 应用程序与 Gatsby 静态应用程序混合使用?
    • 您可以完全控制代码中要索引的内容和不包含的内容。至于下载所有网站数据,当您选择静态站点生成器作为堆栈时,您已经这样做了:) 但是,如果您担心索引变得超级大,我建议您使用 algolia 解决方案。你绝对可以限制路线这里有一个关于gatsbyjs.org/docs/building-apps-with-gatsby的详细文档。
    • 我认为其他一些问题可以在不同的问题中发布,因为最初的问题是如何添加对 Gatsby powred 网站的搜索
    • 重新下载所有数据——这就是我最初的假设。但是如果我在我的网站上使用 gatsby serve,它会创建多个 js 文件。每篇博文一个。当我然后转到首页时,这些并没有全部加载。进入入口点后,例如,如果我删除其中一个 js 文件然后尝试导航,则会出现错误。这意味着它是延迟加载。这意味着能够在不将所有数据加载到浏览器的情况下动态搜索它们确实是有益的。现在诚然,我希望它不会这样做,但似乎
    • Gatsby serve 仅用于开发目的 你不应该在生产服务器中拥有它 你需要构建你的网站并托管公共目录中的内容,至于延迟加载让 gatsby 担心关于这一点,它将确保为您的组件加载所有必要的代码。
    猜你喜欢
    • 2020-12-16
    • 2020-05-23
    • 2019-06-17
    • 2018-10-18
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2020-10-16
    相关资源
    最近更新 更多