Full text, faceted, dependency free search engine in javascript. Created to perform fast search on small json dataset (up to 1000 elements).
(by @darkrubyist)
- faceted search
- full text
- pagination
- no dependencies (only javascript)
npm install itemsjs
const itemsjs = require('itemsjs')(data, configuration);
const items = itemsjs.search();
or using from the client side:
npm install itemsjs
<!-- CDN -->
<!-- unpkg: use the latest release -->
<script src="https://unpkg.com/itemsjs@latest/dist/itemsjs.min.js"></script>
<!-- unpkg: use a specific version -->
<script src="https://unpkg.com/[email protected]/dist/itemsjs.min.js"></script>
<!-- jsdelivr: use a specific version -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/itemsjs.min.js"></script>
<!-- locally -->
<script src="/node_modules/itemsjs/dist/itemsjs.js"></script>
itemsjs = itemsjs(data, configuration);
itemsjs.search()
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
The first data
argument is an array of objects.
Responsible for defining global configuration. Look for full example here - configuration
-
aggregations
filters configuration i.e. fortags
,actors
,colors
, etc. Responsible for generating facets. -
sortings
you can configure different sortings liketags_asc
,tags_desc
with options and later use it with one key. -
searchableFields
an array of searchable fields.
-
per_page
amount of items per page. -
page
page number - used for pagination. -
query
used for full text search. -
sort
used for sorting. one ofsortings
key -
filters
filtering items based on specific aggregations i.e. {tags: ['drama' , 'historical']} -
filter
function responsible for items filtering. The way of working is similar to js native filter function. See example -
prefilter
function which narrows items down in custom way i.e. with filter or slice. See example -
isExactSearch
set totrue
if you want to always show exact search matches. See lunr stemmer and lunr stopWordFilter.
It returns full list of filters for specific aggregation
name
aggregation nameper_page
filters per pagepage
page numberquery
used for quering filters. It's not full text search
It returns similar items to item for given id
field
field name for computing similarity (i.e. tags, actors, colors)minimum
what is the minimum intersection between field of based item and similar item to show them in the resultper_page
filters per pagepage
page number
It's used in case you need to reindex the whole data
An array of objects.
- Lunr.js for providing full text search.