Create An Instant Search Feature With Meilisearch In A React Frontend

Deploy your code in seconds, with no infrastructure to manage. Qoddi App Platform is free for developers! Create an account today.

Meilisearch is an open-source search engine database alternative to Elastic Search or Algolia. It gives fast autocomplete with under 50ms database query performance.

How Meilisearch Works

After installing, Meilisearch provides an API endpoint using the [your-domain]/indexes/’ link. If we have a database of movies, the endpoint will be [your-domain]/indexes/movies’. To have a database of movies we need to create a movies document and insert movie data in it.

Finally, we can fetch the movie data from a React frontend at a super-fast speed while the user types in a form field searching for movies.

Installing Meilisearch On Qoddi

Note: MeiliSearch requires a production instance to run correctly, hence it's not available for free DEV apps.

Qoddi provides a one-click install of Meilisearch from our marketplace section. Just go to the marketplace and launch the Meilisearch app.

This will create a new app with Meilisearch API setup. Get the link and API Key,

Frontend Project Setup

To fetch the data, we need to set up a frontend with React and NextJS. Start a project with your terminal:

npx create-next-app meilisearch
npm i meilisearch

We install the Meilisearch npm SDK too.

Populating The Database

Since we don’t have a movies document created yet, let’s create it. Add this code to addmovies.js

const { MeiliSearch } = require("meilisearch");
const movies = require("./movies.json");
 
client = new MeiliSearch({
   host: "http://<your_meilisearch_qoddi_url>/",
   headers: {
       Authorization: `Bearer ${MEILI_API_KEY}`,
       "Content-Type": "application/json",
   },
});
 
//delete movies and jobs index
// client
//     .index("movies")
//     .delete()
//     .then(() => {
//         console.log("movies index deleted");
//     });
 
client.index("movies").addDocuments(movies);

>> movies.json can be found here

Run this file locally with node command to add movies document to the Meilisearch database:

node addmovies.js

This command will use the addmovies.js script and will add every object in movies.json to our Meilisearch document database.

Search Feature

In your index.js of your NextJS project replace the code with:

import { MeiliSearch } from "meilisearch";
import { useEffect, useState } from "react";
 
const client = new MeiliSearch({
   host: "http://hvlrjtupcw.us05.qoddiapp.com/",
   headers: {
       Authorization: `Bearer ${process.env.MEILI_API_KEY}`,
       "Content-Type": "application/json",
   },
});
 
const App = () => {
   const [movies, setMovies] = useState([]);
   const [search, setSearch] = useState("");
 
   useEffect(() => {
       //search movie index based on search value
       client
           .index("movies")
           .search(search)
           .then((results) => {
               setMovies(results.hits);
           });
   }, [search]);
 
   return (
       <div className="App">
           <div className="search">
               <input
                   type="text"
                   value={search}
                   onChange={(e) => setSearch(e.target.value)}
               />
           </div>
 
           <div className="movies">
               {movies?.map((movie) => (
                   <div className="movie" key={movie.id}>
                       <div className="movie-info">
                           <p>{movie.id}</p>
                           <h2>{movie.name}</h2>
                           <p>{movie.year}</p>
                       </div>
                   </div>
               ))}
           </div>
       </div>
   );
};
 
export default App;

Run npm run dev and test the search functionality by typing in the search box.

Deploy the NextJS app to Qoddi

Create a new Qoddi app from code inside the same stack as your MeiliSearch app. After deployment, create an environment variable called MEILI_MASTER_KEY and update your Next config file accordingly:

env: {
MEILI_MASTER_KEY: process.env.MEILI_MASTER_KEY,
},

Accessing the NextJS app from your web browser will give you access and search to your MeiliSearch database with lightning-fast responses times.