What is instantsearch.js?
instantsearch.js is a library for building performant and instant search experiences with Algolia. It provides a set of widgets and tools to create highly customizable search interfaces.
What are instantsearch.js's main functionalities?
Search Box
The search box widget allows users to input their search queries. It connects to the Algolia index and fetches results based on the user's input.
const search = instantsearch({
indexName: 'instant_search',
searchClient: algoliasearch('YourApplicationID', 'YourSearchOnlyAPIKey')
});
search.addWidget(
instantsearch.widgets.searchBox({
container: '#searchbox'
})
);
search.start();
Hits
The hits widget displays the search results. It can be customized to show different attributes of the search results and highlight the matching parts of the query.
search.addWidget(
instantsearch.widgets.hits({
container: '#hits',
templates: {
item: '<div>{{#helpers.highlight}}{ "attribute": "name" }{{/helpers.highlight}}</div>'
}
})
);
Refinement List
The refinement list widget allows users to filter search results based on specific attributes, such as categories. It provides checkboxes for each attribute value.
search.addWidget(
instantsearch.widgets.refinementList({
container: '#refinement-list',
attribute: 'categories'
})
);
Pagination
The pagination widget enables users to navigate through pages of search results. It provides controls for moving to the next or previous page and jumping to specific pages.
search.addWidget(
instantsearch.widgets.pagination({
container: '#pagination'
})
);
Other packages similar to instantsearch.js
react-instantsearch
react-instantsearch is a library for building Algolia search interfaces in React. It provides React components that wrap instantsearch.js widgets, making it easier to integrate with React applications. Compared to instantsearch.js, it is more suitable for React-based projects.
searchkit
searchkit is a suite of UI components built in React to create search experiences powered by Elasticsearch. It offers a similar set of features to instantsearch.js but is designed to work with Elasticsearch instead of Algolia.
instantsearch.js
instantsearch.js is a library of widgets to build high performance instant search experiences using Algolia
API is unstable. We welcome any idea and pull request.
To get started, check out algolia.github.com/instantsearch.js!
Table of contents
Setup
From a CDN
instantsearch.js is available on jsDelivr:
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/instantsearch.js/0/instantsearch.min.css" />
<script src="//cdn.jsdelivr.net/instantsearch.js/0/instantsearch.min.js"></script>
With npm, browserify, webpack
npm install instantsearch.js --save-dev
Quick Start
var instantsearch = require('instantsearch.js');
var search = instantsearch({
appId: appId,
apiKey: apiKey,
indexName: indexName,
numberLocale: 'fr-FR'
urlSync: {
useHash: false
}
});
search.addWidget(
instantsearch.widgets.searchBox({
container: '#search-box',
placeholder: 'Search for libraries in France...'
})
);
search.addWidget(
instantsearch.widgets.hits({
container: '#hits-container',
hitsPerPage: 10
})
);
search.start();
Browser support
We natively support IE10+ and all other modern browsers without any dependency need
on your side.
To get < IE10 support, please insert this code in the <head>
:
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
We use the polyfill.io.
Development workflow
npm run dev
Test
npm test
npm run test:watch
npm run test:watch:browser
npm run test:watch:browser -- --browsers ChromeCanary
Instant search configuration
The main configuration of instantsearch.js is done through a configuration object.
The minimal configuration is made a of three attributes :
instantsearch({
appId: 'my_application_id',
apiKey: 'my_search_api_key',
indexName: 'my_index_name'
});
It can also contain other optionnal attributes to enable other features.
Number locale
For the display of numbers, the locale will be determined by
the browsers or forced in the configuration :
instantsearch({
appId: 'my_application_id',
apiKey: 'my_search_api_key',
indexName: 'my_index_name',
numberLocale: 'en-US'
});
Initial search parameters
At the start of instantsearch, the search configuration is based on the input
of each widget and the URL. It is also possible to change the defaults of
the configuration through an object that can contain any parameters understood
by the Algolia API.
instantsearch({
appId: 'my_application_id',
apiKey: 'my_search_api_key',
indexName: 'my_index_name',
searchParameters: {
typoTolerance: 'strict'
}
});
URL synchronisation
Instantsearch let you synchronize the url with the current search parameters.
In order to activate this feature, you need to add the urlSync object. It accepts
3 parameters :
- trackedParameters:string[] parameters that will be synchronized in the
URL. By default, it will track the query, all the refinable attribute (facets and numeric
filters), the index and the page.
- useHash:boolean if set to true, the url will be hash based. Otherwise,
it'll use the query parameters using the modern history API.
- threshold:number time in ms after which a new state is created in the browser
history. The default value is 700.
All those parameters are optional and a minimal configuration looks like :
instantsearch({
appId: 'my_application_id',
apiKey: 'my_search_api_key',
indexName: 'my_index_name',
urlSync: {}
});
License
instantsearch.js is MIT licensed.
More...
There's only so much we can cram in here. To read more about the community and guidelines for submitting pull requests, please read the Contributing document.