Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


DevOps By Build Status

Search Widget for ElasticLunr.js (

It will call as the user types and display the results in a paginated manner.

Screen Shot 2020-07-06 at 8 53 43 PM

How To Use It

Add the following script to your page:

    id = "elnr-sw-script"
    size="3"                       <!--Optional, defaults to 3-->
    placeholder="Enter keywords"   <!--Optional, defaults to "Enter keywords..."-->
    theme="dark"                   <!--Optional, defaults to the light theme-->
    src=""> <!--Latest ElasticLunr search widget-->

Make sure to add it after the <script> where you are creating the ElasticLunr index. The Index has to be in the variable index, which the widget calls internally. Otherwise, you will get an error.

The script will render the whole widget in a div with id elasticlunr-search-widget. If the div is not present on the page, it will create and place it right after the script tag - you will probably have to write a little CSS to position the div on the page.

If you are having trouble getting it to run, look under src/test to find an index.html for test. Look inside it to see how ElasticLunr is imported, index is created and finally this Search Widget is imported last. Pay attention, the build under src/test is not necessarily the latest.

See a live example of the widget here:

Index Format

When you create the ElasticLunr index, as explained here, make sure to give it the following format:

var index = elasticlunr(
    function () {

The format is important because that's how the search results will be returned and handled by the widget.

Query format

You only type some words in the Input field and, behind the scenes, this query is performed:

var results =
        fields: {
            title: {boost: 3, expand: true},
            content: {boost: 2, expand: true},
            preview: {boost: 1, expand: true}

Here is how the Search Results look (it's a Json Array):

  0: {
      ref: "4"
      score: 3.4764451146882474
      doc: {
          id: 4
          title: "Polymorphic Input/Output Data"
          link: ""
          preview: "Using polymorphism for input/output data, as an alternative to model classes"
          content: "Lorem Ipsum Content"
          date: "2019-03-31 00:00:00 +0000"


At the moment, the widget takes the following parameter that can offer some customization.

  • Size of the page customizable with the "size" parameter -- defaults to 3
  • Placeholder of the input field customizable with the "placeholder" parameter -- defaults to "Enter keywords..."
  • Theme of the widget. By default, it has a light theme. With the "theme" parameter set to "dark" you will get the dark theme.

Issues and Feature Requests

Feel free to open any Issues or Feature Requests and we will try to help asap. We gladly accept Pull Requests. For instance, one of the next steps in the development of this widget is to let the user specify their custom index format and query type.


After you take down the project, simply go in its root folder and run the following commands

$ npm install
$ ./node_modules/.bin/webpack