Integrate a relevant search bar to your documentation
This tutorial will guide you through the steps of building a relevant and powerful search bar for your documentation 🚀
Run a Meilisearch instance
First of all, you need your documentation content to be scraped and pushed into a Meilisearch instance.
You can install and run Meilisearch on your machine using curl
.
curl -L https://install.meilisearch.com | sh
./meilisearch --master-key=MASTER_KEY
We provide a few other installation methods.
Meilisearch is open-source and can run either on your server or on any cloud provider.
NOTE
The host URL and the API key you will provide in the next steps correspond to the credentials of this Meilisearch instance.
In the example above, the host URL is http://localhost:7700
and the API key is MASTER_KEY
.
Scrape your content
The Meili team provides and maintains a scraper tool to automatically read the content of your website and store it into an index in Meilisearch.
Configuration file
The scraper tool needs a configuration file to know what content you want to scrape. This is done by providing selectors (for example, the html
tag).
Here is an example of a basic configuration file:
{
"index_uid": "docs",
"start_urls": [
"https://www.example.com/doc/"
],
"sitemap_urls": [
"https://www.example.com/sitemap.xml"
],
"stop_urls": [],
"selectors": {
"lvl0": {
"selector": ".docs-lvl0",
"global": true,
"default_value": "Documentation"
},
"lvl1": {
"selector": ".docs-lvl1",
"global": true,
"default_value": "Chapter"
},
"lvl2": ".docs-content .docs-lvl2",
"lvl3": ".docs-content .docs-lvl3",
"lvl4": ".docs-content .docs-lvl4",
"lvl5": ".docs-content .docs-lvl5",
"lvl6": ".docs-content .docs-lvl6",
"text": ".docs-content p, .docs-content li"
}
}
The index_uid
field is the index identifier in your Meilisearch instance in which your website content is stored. The scraping tool will create a new index if it does not exist.
The docs-content
class is the main container of the textual content in this example. Most of the time, this tag is a <main>
or an <article>
HTML element.
lvlX
selectors should use the standard title tags like h1
, h2
, h3
, etc. You can also use static classes. Set a unique id
or name
attribute to these elements.
All searchable lvl
elements outside this main documentation container (for instance, in a sidebar) must be global
selectors. They will be globally picked up and injected to every document built from your page.
If you use VuePress for your documentation, you can check out the configuration file we use in production.
In our case, the main container is theme-default-content
and the selector titles and subtitles are h1
, h2
...
TIP
More optional fields are available to fit your needs.
Run the scraper
You can run the scraper with Docker. With our local Meilisearch instance set up at the first step, we run:
docker run -t --rm \
--network=host \
-e MEILISEARCH_HOST_URL='http://localhost:7700' \
-e MEILISEARCH_API_KEY='MASTER_KEY' \
-v <absolute-path-to-your-config-file>:/docs-scraper/config.json \
getmeili/docs-scraper:latest pipenv run ./docs_scraper config.json
NOTE
If you don't want to use Docker, here are other ways to run the scraper.
<absolute-path-to-your-config-file>
should be the absolute path of your configuration file defined at the previous step.
The API key should have the permissions to add documents into your Meilisearch instance. In a production environment, we recommend providing the Default Admin API Key
as it has enough permissions to perform such requests.
More about Meilisearch security.
TIP
We recommend running the scraper at each new deployment of your documentation, as we do for the Meilisearch's one.
Integrate the search bar
If your documentation is not a VuePress application, you can directly go to this section.
For VuePress documentation sites
If you use VuePress for your documentation, we provide a Vuepress plugin. This plugin is used in production in the Meilisearch documentation.
In your VuePress project:
yarn add vuepress-plugin-meilisearch
In your config.js
file:
module.exports = {
plugins: [
[
"vuepress-plugin-meilisearch",
{
"hostUrl": "<your-meilisearch-host-url>",
"apiKey": "<your-meilisearch-api-key>",
"indexUid": "docs"
}
],
],
}
The hostUrl
and the apiKey
fields are the credentials of the Meilisearch instance. Following on from this tutorial, they are respectively http://localhost:7700
and MASTER_KEY
.
indexUid
is the index identifier in your Meilisearch instance in which your website content is stored. It has been defined in the config file.
These three fields are mandatory, but more optional fields are available to customize your search bar.
WARNING
Since the configuration file is public, we strongly recommend providing a key that can only access the search endpoint , such as the Default Search API Key
, in a production environment.
Read more about Meilisearch security.
For all kinds of documentation
If you don't use VuePress for your documentation, we provide a front-end SDK to integrate a powerful and relevant search bar to any documentation website.
Docxtemplater search bar demo
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docs-searchbar.js@{version}/dist/cdn/docs-searchbar.min.css" />
</head>
<body>
<input type="search" id="search-bar-input">
<script src="https://cdn.jsdelivr.net/npm/docs-searchbar.js@{version}/dist/cdn/docs-searchbar.min.js"></script>
<script>
docsSearchBar({
hostUrl: '<your-meilisearch-host-url>',
apiKey: '<your-meilisearch-api-key>',
indexUid: 'docs',
inputSelector: '#search-bar-input',
debug: true // Set debug to true if you want to inspect the dropdown
});
</script>
</body>
</html>
The hostUrl
and the apiKey
fields are the credentials of the Meilisearch instance. Following on from this tutorial, they are respectively http://localhost:7700
and MASTER_KEY
.
indexUid
is the index identifier in your Meilisearch instance in which your website content is stored. It has been defined in the config file.
inputSelector
is the id
attribute of the HTML search input tag.
WARNING
We strongly recommend providing a Default Search API Key
in a production environment, which is enough to perform search requests.
Read more about Meilisearch security.
The default behavior of this library fits perfectly for a documentation search bar, but you might need some customizations.
NOTE
For more concrete examples, you can check out this basic HTML file or this more advanced Vue file.
What's next?
At this point, you should have a working search engine on your website, congrats! 🎉 You can check this tutorial if you now want to run Meilisearch in production!