Tools: Meilisearch Has a Free API: Lightning-Fast Search Engine for Your Apps (2026)

Tools: Meilisearch Has a Free API: Lightning-Fast Search Engine for Your Apps (2026)

What Is Meilisearch?

Quick Start

Meilisearch API: Index and Search

Settings Configuration

Multi-Search

Python SDK Meilisearch is an open-source, lightning-fast search engine that provides instant search-as-you-type experiences. With typo tolerance, faceted search, and a RESTful API, it integrates into any application in minutes. Meilisearch is a Rust-based search engine designed for end-user facing search. It returns results in under 50ms, handles typos, and supports multiple languages out of the box. Think Algolia, but open-source and self-hosted. Need to scrape web data for your search engine? Check out my web scraping tools on Apify — production-ready actors for Reddit, Google Maps, and more. Questions? Email me at [email protected] Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

# Install and run -weight: 500;">curl -L https://-weight: 500;">install.meilisearch.com | sh ./meilisearch --master-key="your-master-key" # Or via Docker -weight: 500;">docker run -d -p 7700:7700 -v meili_data:/meili_data \ getmeili/meilisearch:latest \ meilisearch --master-key="your-master-key" # Install and run -weight: 500;">curl -L https://-weight: 500;">install.meilisearch.com | sh ./meilisearch --master-key="your-master-key" # Or via Docker -weight: 500;">docker run -d -p 7700:7700 -v meili_data:/meili_data \ getmeili/meilisearch:latest \ meilisearch --master-key="your-master-key" # Install and run -weight: 500;">curl -L https://-weight: 500;">install.meilisearch.com | sh ./meilisearch --master-key="your-master-key" # Or via Docker -weight: 500;">docker run -d -p 7700:7700 -v meili_data:/meili_data \ getmeili/meilisearch:latest \ meilisearch --master-key="your-master-key" import requests MEILI = "http://localhost:7700" HEADERS = {"Authorization": "Bearer your-master-key", "Content-Type": "application/json"} # Create index and add documents documents = [ {"id": 1, "title": "React Tutorial", "category": "frontend", "views": 15000}, {"id": 2, "title": "Docker for Beginners", "category": "devops", "views": 23000}, {"id": 3, "title": "Python Web Scraping Guide", "category": "backend", "views": 18000}, {"id": 4, "title": "Kubernetes Best Practices", "category": "devops", "views": 12000}, {"id": 5, "title": "TypeScript Advanced Types", "category": "frontend", "views": 9000} ] requests.post(f"{MEILI}/indexes/articles/documents", headers=HEADERS, json=documents) # Search (with typo tolerance!) result = requests.post(f"{MEILI}/indexes/articles/search", headers=HEADERS, json={ "q": "kuberntes", # typo in 'kubernetes' - still finds it! "limit": 10 }).json() for hit in result["hits"]: print(f"{hit['title']} ({hit['category']}) - {hit['views']} views") # Faceted search result = requests.post(f"{MEILI}/indexes/articles/search", headers=HEADERS, json={ "q": "", "facets": ["category"], "filter": "category = devops AND views > 10000", "sort": ["views:desc"] }).json() print(f"Facets: {result['facetDistribution']}") import requests MEILI = "http://localhost:7700" HEADERS = {"Authorization": "Bearer your-master-key", "Content-Type": "application/json"} # Create index and add documents documents = [ {"id": 1, "title": "React Tutorial", "category": "frontend", "views": 15000}, {"id": 2, "title": "Docker for Beginners", "category": "devops", "views": 23000}, {"id": 3, "title": "Python Web Scraping Guide", "category": "backend", "views": 18000}, {"id": 4, "title": "Kubernetes Best Practices", "category": "devops", "views": 12000}, {"id": 5, "title": "TypeScript Advanced Types", "category": "frontend", "views": 9000} ] requests.post(f"{MEILI}/indexes/articles/documents", headers=HEADERS, json=documents) # Search (with typo tolerance!) result = requests.post(f"{MEILI}/indexes/articles/search", headers=HEADERS, json={ "q": "kuberntes", # typo in 'kubernetes' - still finds it! "limit": 10 }).json() for hit in result["hits"]: print(f"{hit['title']} ({hit['category']}) - {hit['views']} views") # Faceted search result = requests.post(f"{MEILI}/indexes/articles/search", headers=HEADERS, json={ "q": "", "facets": ["category"], "filter": "category = devops AND views > 10000", "sort": ["views:desc"] }).json() print(f"Facets: {result['facetDistribution']}") import requests MEILI = "http://localhost:7700" HEADERS = {"Authorization": "Bearer your-master-key", "Content-Type": "application/json"} # Create index and add documents documents = [ {"id": 1, "title": "React Tutorial", "category": "frontend", "views": 15000}, {"id": 2, "title": "Docker for Beginners", "category": "devops", "views": 23000}, {"id": 3, "title": "Python Web Scraping Guide", "category": "backend", "views": 18000}, {"id": 4, "title": "Kubernetes Best Practices", "category": "devops", "views": 12000}, {"id": 5, "title": "TypeScript Advanced Types", "category": "frontend", "views": 9000} ] requests.post(f"{MEILI}/indexes/articles/documents", headers=HEADERS, json=documents) # Search (with typo tolerance!) result = requests.post(f"{MEILI}/indexes/articles/search", headers=HEADERS, json={ "q": "kuberntes", # typo in 'kubernetes' - still finds it! "limit": 10 }).json() for hit in result["hits"]: print(f"{hit['title']} ({hit['category']}) - {hit['views']} views") # Faceted search result = requests.post(f"{MEILI}/indexes/articles/search", headers=HEADERS, json={ "q": "", "facets": ["category"], "filter": "category = devops AND views > 10000", "sort": ["views:desc"] }).json() print(f"Facets: {result['facetDistribution']}") # Configure searchable and filterable attributes requests.patch(f"{MEILI}/indexes/articles/settings", headers=HEADERS, json={ "searchableAttributes": ["title", "category"], "filterableAttributes": ["category", "views"], "sortableAttributes": ["views"], "synonyms": { "k8s": ["kubernetes"], "js": ["javascript"], "ts": ["typescript"] }, "stopWords": ["the", "a", "an", "is", "for"] }) # Configure searchable and filterable attributes requests.patch(f"{MEILI}/indexes/articles/settings", headers=HEADERS, json={ "searchableAttributes": ["title", "category"], "filterableAttributes": ["category", "views"], "sortableAttributes": ["views"], "synonyms": { "k8s": ["kubernetes"], "js": ["javascript"], "ts": ["typescript"] }, "stopWords": ["the", "a", "an", "is", "for"] }) # Configure searchable and filterable attributes requests.patch(f"{MEILI}/indexes/articles/settings", headers=HEADERS, json={ "searchableAttributes": ["title", "category"], "filterableAttributes": ["category", "views"], "sortableAttributes": ["views"], "synonyms": { "k8s": ["kubernetes"], "js": ["javascript"], "ts": ["typescript"] }, "stopWords": ["the", "a", "an", "is", "for"] }) # Search multiple indexes at once results = requests.post(f"{MEILI}/multi-search", headers=HEADERS, json={ "queries": [ {"indexUid": "articles", "q": "-weight: 500;">docker", "limit": 3}, {"indexUid": "tutorials", "q": "-weight: 500;">docker", "limit": 3} ] }).json() # Search multiple indexes at once results = requests.post(f"{MEILI}/multi-search", headers=HEADERS, json={ "queries": [ {"indexUid": "articles", "q": "-weight: 500;">docker", "limit": 3}, {"indexUid": "tutorials", "q": "-weight: 500;">docker", "limit": 3} ] }).json() # Search multiple indexes at once results = requests.post(f"{MEILI}/multi-search", headers=HEADERS, json={ "queries": [ {"indexUid": "articles", "q": "-weight: 500;">docker", "limit": 3}, {"indexUid": "tutorials", "q": "-weight: 500;">docker", "limit": 3} ] }).json() import meilisearch client = meilisearch.Client("http://localhost:7700", "your-master-key") index = client.index("articles") # Add documents index.add_documents(documents) # Search results = index.search("react tutorial", {"limit": 5, "attributesToHighlight": ["title"]}) for hit in results["hits"]: print(hit["_formatted"]["title"]) # Highlighted matches import meilisearch client = meilisearch.Client("http://localhost:7700", "your-master-key") index = client.index("articles") # Add documents index.add_documents(documents) # Search results = index.search("react tutorial", {"limit": 5, "attributesToHighlight": ["title"]}) for hit in results["hits"]: print(hit["_formatted"]["title"]) # Highlighted matches import meilisearch client = meilisearch.Client("http://localhost:7700", "your-master-key") index = client.index("articles") # Add documents index.add_documents(documents) # Search results = index.search("react tutorial", {"limit": 5, "attributesToHighlight": ["title"]}) for hit in results["hits"]: print(hit["_formatted"]["title"]) # Highlighted matches - Search in under 50ms - Typo tolerance - Faceted search and filtering - Multi-language support - Synonyms and -weight: 500;">stop words - Tenant tokens (multi-tenancy) - RESTful API - Meilisearch Docs - Meilisearch GitHub — 48K+ stars - API Reference