Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including metalsmith-algolia with all npm packages installed. Try it out:

var metalsmithAlgolia = require("metalsmith-algolia")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

metalsmith-algolia v0.1.0

Indexing utility for referencing metalsmith content to Algolia

metalsmith-algolia

A metalsmith plugin for indexing content on Algolia

This plugin allows you to index your content in Algolia search engine on metalsmith building process.

If this plugin doesn't fit your needs, please don't hesitate to ask for feature requests.

Installation

npm install --save metalsmith-algolia

Usage

Javascript API

The exemple bellow show the minimum code required to index your content. (node: metalsmith-markdown is not required)

const metalsmith = require('metalsmith');
const markdown = require('metalsmith-markdown');
const algolia = require('metalsmith-algolia');

metalsmith(__dirname)
  .source('./src')
  .use(markdown())
  .use(algolia({
    projectId: '<algolia-project-id>',
    privateKey: '<algolia-private-key>',
    index: '<algolia-index>'
  }))
  .build();

please, use command line arguments or environement variables to store your algolia private key

Templates metadata

Here is an exemple with a fake markdown template ./src/mypage.md

---
title: My awesome static page !
description: This is a exemple page
algolia: true
---
# My awesome static page !
content exemple

Indexed document

By default, metadata (string/boolean/integers) and contents will be sent to Algolia for all files with algolia: true metadata
With this exemple, the generated document will look like:

{
  "title": "My awesome static page !",
  "description": "This is a exemple page",
  "contents": "<h1>My awesome static page !\n<p>content exemple</p>"
}

Customize indexed documents

If you need to cleanup your contents, compute additional fields, or remove metadata from indexing, you can use the fileParser option to plugin constructor to give a custom callback to generate your own documents:

const metalsmith = require('metalsmith');
const markdown = require('metalsmith-markdown');
const algolia = require('metalsmith-algolia');
const cheerio = require('cheerio');

function customFileParser(file, metadata) {
  let documents = [];
  let $ = cheerio.load(metadata.contents.toString());

  // add as many as documents as you need
  documents.push({
    title: metadata.title,
    contents: $('p').text();
  })

  return documents;
}

metalsmith(__dirname)
  .source('./src')
  .use(markdown())
  .use(algolia({
    projectId: '<algolia-project-id>',
    privateKey: '<algolia-private-key>',
    index: '<algolia-index>',
    fileParser: customFileParser
  }))
  .build();

This time, the generated document will look like:

{
  "title": "My awesome static page !",
  "contents": "content exemple"
}

Options reference

namedefaultdescription
projectId(required) Algolia project identifier
privateKey(required) Algolia private key
index(required)* Algolia index
clearIndexfalseClear Algolia index before indexing new documents
fileParsernullFunction reference to a custom handler for building documents

hint: metalsmith-algolia use debug

Options reference

Todolist

  • [ ] Add tests/linter
  • [ ] Add travis configuration
  • [ ] Try bulk operations (without fail fast)
RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free