node package manager
Orgs are free. Discover, share, and reuse code in your team. Create a free org »

itemsjs

ItemsJS - search engine in javascript

Full text, faceted, dependency free search engine in javascript. Created to perform fast search on small json dataset (up to 1000 elements).

Features

  • faceted search
  • full text
  • pagination
  • no dependencies (only javascript)

Getting Started

npm install itemsjs
const itemsjs = require('itemsjs')(data, configuration);
const items = itemsjs.search();

or using from the client side:

npm install itemsjs
<script src="/node_modules/itemsjs/dist/itemsjs.js"></script>
itemsjs = itemsjs(data, configuration);
itemsjs.search()

Example

npm install itemsjs
 
# download json data 
wget https://raw.githubusercontent.com/itemsapi/itemsapi-example-data/master/items/movies-processed.json -O data.json

Create search.js:

var data = require('./data.json');
 
var itemsjs = require('itemsjs')(data, {
  sortings: {
    name_asc: {
      field: 'name',
      order: 'asc'
    }
  },
  aggregations: {
    tags: {
      title: 'Tags',
      size: 10
    },
    actors: {
      title: 'Actors',
      size: 10
    },
    genres: {
      title: 'Genres',
      size: 10
    }
  },
  searchableFields: ['name', 'tags']
});
 
/**
 * get filtered list of movies 
 */
var movies = itemsjs.search({
  per_page: 1,
  sort: 'name_asc',
  // full text search
  // query: 'forrest gump',
  filters: {
    tags: ['1980s']
  }
})
console.log(JSON.stringify(movies, null, 2));
 
/**
 * get list of top tags 
 */
var top_tags = itemsjs.aggregation({
  name: 'tags',
  per_page: 10
})
console.log(JSON.stringify(top_tags, null, 2));

Test that with :

node search.js

API

var itemsjs = ItemsJS(data, [configuration])

data

The first data argument is an array of objects.

configuration

Responsible for defining global configuration

  • aggregations filters configuration i.e. for tags, actors, colors, etc. Responsible for generating facets.

  • sortings you can configure different sortings like tags_asc, tags_desc with options and later use it with one key.

  • searchableFields an array of searchable fields.

itemsjs.search(options)

options

  • per_page amount of items per page.

  • page page number - used for pagination.

  • query used for full text search.

  • sort used for sorting. one of sortings key

  • filters filtering items based on specific aggregations i.e. {tags: ['drama' , 'historical']}

itemsjs.aggregation(options)

It returns full list of filters for specific aggregation

options

  • name aggregation name

  • per_page filters per page

  • page page number

  • query used for quering filters. It's not full text search

itemsjs.reindex(data)

It's used in case you need to reindex the whole data

data

An array of objects.

Credit

  • Lunr.js for providing full text search.