0.0.2 • Published 4 years ago

gatsby-plugin-blogsearch v0.0.2

Weekly downloads
-
License
MIT
Repository
-
Last release
4 years ago

BlogSearch index building tool for Gatsby

// Asciidoc references // Documentation: https://asciidoctor.org/docs/user-manual/ // Quick reference: https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/ // Asciidoc vs Markdown: https://asciidoctor.org/docs/user-manual/#comparison-by-example // GitHub Flavored Asciidoc (GFA): https://gist.github.com/dcode/0cfbf2699a1fe9b46ff04c41721dda74

:project-version: 0.0.3 :rootdir: https://github.com/kbumsik/blogsearch

ifdef::env-github[] // Emoji :tip-caption: :bulb: :note-caption: :information_source: :important-caption: :heavy_exclamation_mark: :caution-caption: :fire: :warning-caption: :warning: // URL :imagesdir: https://gist.githubusercontent.com/path/to/gist/revision/dir/with/all/images endif::[]

CAUTION: This is a part of link:{rootdir}BlogSearch project. If you would like to know the overall concept, go to link:{rootdir}the parent directory.

1. Building a search index file

Installation

source,shell npm install gatsby-plugin-blogsearch

Configuration

CAUTION: Go to link:{rootdir}#whats-in-the-indexthe "What's in the index file" section of the main project. For more details on how to configure fields.

.gatsby.config.js

source,javascript,options="nowrap",subs="verbatim,attributes"

module.exports = { ... other Gatsby options ...

plugins: [ { resolve: 'gatsby-plugin-blogsearch', options: { // Generated blogsearch database file. output: 'reactjs.org.gatsby-example.db.wasm', // fields configurations // See: {rootdir}#whats-in-the-index fields: { title: { enabled: true, indexed: true, hasContent: true, }, body: { enabled: true, indexed: true, hasContent: true, }, url: { enabled: true, indexed: true, hasContent: true, }, categories: { enabled: true, indexed: true, hasContent: true, }, tags: { enabled: true, indexed: true, hasContent: true, }, }, // GraphQL query used to fetch all data for the search index. This is // required. query: ` { allMarkdownRemark { edges { node { fields { slug } frontmatter { title } rawMarkdownBody

            # excerpt
            # html
          }
        }
      }
      site {
        siteMetadata {
          siteUrl
        }
      }
    }
    `,
    // Function used to map the result from the GraphQL query. This should
    // return an array of items to index in the form of flat objects
    // containing field properties to index.
    normalizer: ({ data }) =>
      data.allMarkdownRemark.edges.map(({ node }) => {
        const slug = (node.fields.slug.charAt(0) !== '/' ? '/' : '')  + node.fields.slug;
        return {
          title: node.frontmatter.title,
          body: node.rawMarkdownBody
                  .replace(/[#`\[\]]+/g, '')
                  .replace(/\(.*\)/g, '')
                  .replace(/\s+/g, ' '),
          url: data.site.siteMetadata.siteUrl + slug,
          categories: slug !== '/' ? slug.substring(1, slug.indexOf('/', 1)) : '',
          tags: '',
        };
      }),
  },
},
...
Other Gatsby plugin options
...

], ... Rest of Gatsby options ...

};

Example project

Go to demo

2. Enabling the search engine in the webpage

You need to enable the search engine in the web page. Go to link:../blogsearchblogsearch Engine.

Again, if you would like to understand the concept of BlogSearch, go to link:{rootdir}/the parent directory.