+
Configure for your app
diff --git a/resources/help/comparison_to_alternatives.mdx b/resources/help/comparison_to_alternatives.mdx
deleted file mode 100644
index 3011dc5963..0000000000
--- a/resources/help/comparison_to_alternatives.mdx
+++ /dev/null
@@ -1,291 +0,0 @@
----
-title: Comparison to alternatives
-sidebarTitle: Comparison to alternatives
-description: "Deciding on a search engine for your project is an important but difficult task. This article describes the differences between Meilisearch and other search engines."
-sidebarDepth: 4
----
-
-There are many search engines on the web, both open-source and otherwise. Deciding which search solution is the best fit for your project is very important, but also difficult. In this article, we'll go over the differences between Meilisearch and other search engines:
-
-- In the [comparison table](#comparison-table), we present a general overview of the differences between Meilisearch and other search engines
-
-- In the [approach comparison](#approach-comparison), instead, we focus on how Meilisearch measures up against [ElasticSearch](#meilisearch-vs-elasticsearch) and [Algolia](#meilisearch-vs-algolia), currently two of the biggest solutions available in the market
-
-- Finally, we end this article with [an in-depth analysis of the broader search engine landscape](#a-quick-look-at-the-search-engine-landscape)
-
-
-Please be advised that many of the search products described below are constantly evolving—just like Meilisearch. These are only our own impressions, and may not reflect recent changes. If something appears inaccurate, please don't hesitate to open an [issue or pull request](https://github.com/meilisearch/documentation).
-
-
-## Comparison table
-
-### General overview
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:----:|:----:|:-----:|:----:|
-| Source code licensing | [MIT](https://choosealicense.com/licenses/mit/) (CE) / [BUSL-1.1](https://mariadb.com/bsl11/) (EE) | Closed-source | [GPL-3](https://choosealicense.com/licenses/gpl-3.0/)
(Fully open-source) | [AGPLv3](https://choosealicense.com/licenses/agpl-3.0/) / SSPL / ELv2
(open-source) |
-| Built with | Rust
[Check out why we believe in Rust](https://www.abetterinternet.org/docs/memory-safety/). | C++ | C++ | Java |
-| Data storage | Disk with Memory Mapping -- Not limited by RAM | Limited by RAM | Limited by RAM | Disk with RAM cache |
-
-### Features
-
-#### Integrations and SDKs
-
-Note: we are only listing libraries officially supported by the internal teams of each different search engine.
-
-Can't find a client you'd like us to support? [Submit your idea here](https://github.com/orgs/meilisearch/discussions)
-
-| SDK | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| REST API | ✅ | ✅ | ✅ | ✅ |
-| [JavaScript client](https://github.com/meilisearch/meilisearch-js) | ✅ | ✅ | ✅ | ✅ |
-| [PHP client](https://github.com/meilisearch/meilisearch-php) | ✅ | ✅ | ✅ | ✅ |
-| [Python client](https://github.com/meilisearch/meilisearch-python) | ✅ | ✅ | ✅ | ✅ |
-| [Ruby client](https://github.com/meilisearch/meilisearch-ruby) | ✅ | ✅ | ✅ | ✅ |
-| [Java client](https://github.com/meilisearch/meilisearch-java) | ✅ | ✅ | ✅ | ✅ |
-| [Swift client](https://github.com/meilisearch/meilisearch-swift) | ✅ | ✅ | ✅ | ❌ |
-| [.NET client](https://github.com/meilisearch/meilisearch-dotnet) | ✅ | ✅ | ✅ | ✅ |
-| [Rust client](https://github.com/meilisearch/meilisearch-rust) | ✅ | ❌ | 🔶
WIP | ✅ |
-| [Go client](https://github.com/meilisearch/meilisearch-go) | ✅ | ✅ | ✅ | ✅ |
-| [Dart client](https://github.com/meilisearch/meilisearch-dart) | ✅ | ✅ | ✅ | ❌ |
-| [Symfony](https://github.com/meilisearch/meilisearch-symfony) | ✅ | ✅ | ✅ | ❌ |
-| Django | ❌ | ✅ | ❌ | ❌ |
-| [Rails](https://github.com/meilisearch/meilisearch-rails) | ✅ | ✅ | 🔶
WIP | ✅ ||
-| [Official Laravel Scout Support](https://github.com/laravel/scout) | ✅ | ✅ | ✅ | ❌
Available as a standalone module |
-| [Instantsearch](https://github.com/meilisearch/meilisearch-js-plugins/tree/main/packages/instant-meilisearch) | ✅ | ✅ | ✅ | ✅ |
-| [Autocomplete](https://github.com/meilisearch/meilisearch-js-plugins/tree/main/packages/autocomplete-client) | ✅ | ✅ | ✅ | ✅ |
-| [Strapi](https://github.com/meilisearch/strapi-plugin-meilisearch) | ✅ | ✅ | ❌ | ❌ |
-| [Firebase](https://github.com/meilisearch/firestore-meilisearch) | ✅ | ✅ | ✅ | ❌ |
-
-#### Configuration
-
-##### Document schema
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| Schemaless | ✅ | ✅ | 🔶
`id` field is required and must be a string | ✅ |
-| Nested field support | ✅ | ✅ | ✅ | ✅ |
-| Nested document querying | ❌ | ❌ | ❌ | ✅ |
-| Automatic document ID detection | ✅ | ❌ | ❌ | ❌ |
-| Native document formats | `JSON`, `NDJSON`, `CSV` | `JSON` | `NDJSON` | `JSON`, `NDJSON`, `CSV` |
-| Compression Support | Gzip, Deflate, and Brotli | Gzip | ❌
Reads payload as JSON which can lead to document corruption | Gzip |
-
-##### Relevancy
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| Typo tolerant | ✅ | ✅ | ✅ | 🔶
Needs to be specified by fuzzy queries |
-| Orderable ranking rules | ✅ | ✅ | 🔶
Field weight can be changed, but ranking rules order cannot be changed. | ❌|
-| Custom ranking rules | ✅ | ✅ | ✅ | 🔶
Function score query |
-| Query field weights | ✅ | ✅ | ✅ | ✅ |
-| Synonyms | ✅ | ✅ | ✅ | ✅ |
-| Stop words | ✅ | ✅ | ✅ | ✅ |
-| Automatic language detection | ✅ | ✅ | ❌ | ❌ |
-| All language supports | ✅ | ✅ | ✅ | ✅ |
-| Ranking Score Details | ✅ | ✅ | ❌ | ✅ |
-
-##### Security
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| API Key Management | ✅ | ✅ | ✅ | ✅ |
-| Tenant tokens & multi-tenant indexes | ✅
[Multitenancy support](/learn/security/multitenancy_tenant_tokens) | ✅ | ✅ | ✅
Role-based |
-
-##### Search
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| Placeholder search | ✅ | ✅ | ✅ | ✅ |
-| Multi-index search | ✅ | ✅ | ✅ | ✅ |
-| Federated search | ✅ | ❌ | ❌ | ✅ |
-| Exact phrase search | ✅ | ✅ | ✅ | ✅ |
-| Geo search | ✅ | ✅ | ✅ | ✅ |
-| Sort by | ✅ | 🔶
Limited to one `sort_by` rule per index. Indexes may have to be duplicated for each sort field and sort order | ✅
Up to 3 sort fields per search query | ✅ |
-| Filtering | ✅
Support complex filter queries with an SQL-like syntax. | 🔶
Does not support `OR` operation across multiple fields | ✅ | ✅ |
-| Faceted search | ✅ | ✅ | ✅
Faceted fields must be searchable
Faceting can take several seconds when >10 million facet values must be returned | ✅ |
-| Distinct attributes
De-duplicate documents by a field value
| ✅ | ✅ | ✅ | ✅ |
-| Grouping
Bucket documents by field values
| 🔶
Via `distinct` parameter | ✅ | ✅ | ✅ |
-
-##### AI-powered search
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| Semantic Search | ✅ | 🔶
Under Premium plan | ✅ | ✅ |
-| Hybrid Search | ✅ | 🔶
Under Premium plan | ✅ | ✅ |
-| Embedding Generation | ✅
OpenAI
HuggingFace
Ollama
REST embedders
| Undisclosed | ✅
Built-in ONNX models
OpenAI
Azure OpenAI
GCP Vertex AI | ✅
ELSER
E5
Cohere
OpenAI
Azure
Google AI Studio
Hugging Face
|
-| Prompt Templates | ✅ | Undisclosed | ❌ | ❌ |
-| Vector Store | ✅ | Undisclosed | ✅ | ✅ |
-| Langchain Integration | ✅ | ❌ | ✅ | ✅ |
-| GPU support | ✅
CUDA | Undisclosed | ✅
CUDA | ✅
Elastic Inference Service |
-
-##### Visualize
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| [Mini Dashboard](https://github.com/meilisearch/mini-dashboard) | ✅ | 🔶
Cloud product | 🔶
Cloud product | ✅ |
-| Search Analytics | ✅
[Cloud product](https://www.meilisearch.com/cloud) | ✅
Cloud Product | ❌ | ✅
Cloud Product |
-| Monitoring Dashboard | ✅
[Cloud product](https://www.meilisearch.com/cloud) | ✅
Cloud Product | ✅
Cloud Product | ✅
Cloud Product |
-
-#### Deployment
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| Self-hosted | ✅ | ❌ | ✅ | ✅ |
-| Platform Support | ARM
x86
x64 | n/a | 🔶 ARM (requires Docker on macOS)
x86
x64 | ARM
x86
x64 |
-| Official 1-click deploy | ✅
[DigitalOcean](https://marketplace.digitalocean.com/apps/meilisearch)
[Platform.sh](https://console.platform.sh/projects/create-project?template=https://raw.githubusercontent.com/platformsh/template-builder/master/templates/meilisearch/.platform.template.yaml)
[Azure](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fcmaneu%2Fmeilisearch-on-azure%2Fmain%2Fmain.json)
[Railway](https://railway.app/new/template/TXxa09?referralCode=YltNo3)
[Koyeb](https://app.koyeb.com/deploy?type=docker&image=getmeili/meilisearch&name=meilisearch-on-koyeb&ports=7700;http;/&env%5BMEILI_MASTER_KEY%5D=REPLACE_ME_WITH_A_STRONG_KEY) | ❌ | 🔶
Only for the cloud-hosted solution | ❌ |
-| Official cloud-hosted solution | [Meilisearch Cloud](https://www.meilisearch.com/cloud?utm_campaign=oss&utm_source=docs&utm_medium=comparison-table) | ✅ | ✅ | ✅ |
-| High availability | ✅
Sharding & replication (Cloud and self-hosted) | ✅ | ✅ | ✅ |
-| Run-time dependencies | None | N/A | None | None |
-| Backward compatibility | ✅ | N/A | ✅ | ✅ |
-| Upgrade path | Documents are automatically reindexed on upgrade | N/A | Documents are automatically reindexed on upgrade | Documents are automatically reindexed on upgrade, up to 1 major version |
-
-### Limits
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| Maximum number of indexes | No limitation | 1000, increasing limit possible by contacting support | No limitation | No limitation |
-| Maximum index size | 80TiB | 128GB | Constrained by RAM | No limitation |
-| Maximum document size | No limitation | 100KB, configurable | No limitation | 100KB default, configurable |
-
-### Community
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| GitHub stars of the main project | 56K | N/A | 25K | 76K |
-| Number of contributors on the main project | 200+ | N/A | 38 | 1,900+ |
-| Public Discord/Slack community size | 3,000+ | N/A | 2,000 | 16K |
-
-### Support
-
-| | Meilisearch | Algolia | Typesense | Elasticsearch |
-|---|:---:|:----:|:---:|:---:|
-| Status page | ✅ | ✅ | ✅ | ✅ |
-| Free support channels | Instant messaging / chatbox (2-3h delay),
emails,
public Discord community,
GitHub issues & discussions | Instant messaging / chatbox,
public community forum | Instant messaging/chatbox (24h-48h delay),
public Slack community,
GitHub issues. | Public Slack community,
public community forum,
GitHub issues |
-| Paid support channels | Slack Channel, emails, personalized support — whatever you need, we’ll be there! | Emails | Emails,
phone,
private Slack | Web support,
emails,
phone |
-
-## Approach comparison
-
-### Meilisearch vs Elasticsearch
-
-Elasticsearch is designed as a backend search engine. Although it is not suited for this purpose, it is commonly used to build search bars for end-users.
-
-Elasticsearch can handle searching through massive amounts of data and performing text analysis. In order to make it effective for end-user searching, you need to spend time understanding more about how Elasticsearch works internally to be able to customize and tailor it to fit your needs.
-
-Unlike Elasticsearch, which is a general search engine designed for large amounts of log data (for example, back-facing search), Meilisearch is intended to deliver performant instant-search experiences aimed at end-users (for example, front-facing search).
-
-Elasticsearch can sometimes be too slow if you want to provide a full instant search experience. Most of the time, it is significantly slower in returning search results compared to Meilisearch.
-
-Meilisearch is a perfect choice if you need a simple and easy tool to deploy a typo-tolerant search bar. It provides prefix searching capability, makes search intuitive for users, and returns results instantly with excellent relevance out of the box.
-
-For a more detailed analysis of how it compares with Meilisearch, refer to our [blog post on Elasticsearch](https://blog.meilisearch.com/meilisearch-vs-elasticsearch/?utm_campaign=oss&utm_source=docs&utm_medium=comparison).
-
-### Meilisearch vs Algolia
-
-Meilisearch was inspired by Algolia's product and the algorithms behind it. We indeed studied most of the algorithms and data structures described in their blog posts in order to implement our own. Meilisearch is thus a new search engine based on the work of Algolia and recent research papers.
-
-Meilisearch provides similar features and reaches the same level of relevance just as quickly as its competitor.
-
-If you are a current Algolia user considering a switch to Meilisearch, you may be interested in our [migration guide](/resources/migration/algolia_migration).
-
-#### Key similarities
-
-Some of the most significant similarities between Algolia and Meilisearch are:
-
-- [Features](/getting_started/features) such as search-as-you-type, typo tolerance, faceting, etc.
-- Fast results targeting an instant search experience (answers < 50 milliseconds)
-- Schemaless indexing
-- Support for all JSON data types
-- Asynchronous API
-- Similar query response
-
-#### Key differences
-
-Contrary to Algolia, Meilisearch is open-source and can be forked or self-hosted.
-
-Additionally, Meilisearch is written in Rust, a modern systems-level programming language. Rust provides speed, portability, and flexibility, which makes the deployment of our search engine inside virtual machines, containers, or even [Lambda@Edge](https://aws.amazon.com/lambda/edge/) a seamless operation.
-
-#### Pricing
-
-The [pricing model for Algolia](https://www.algolia.com/pricing/) is based on the number of records kept and the number of API operations performed. It can be prohibitively expensive for small and medium-sized businesses.
-
-Meilisearch is an **open-source** search engine available via [Meilisearch Cloud](https://meilisearch.com/cloud?utm_campaign=oss&utm_source=docs&utm_medium=comparison) or self-hosted. Unlike Algolia, [Meilisearch pricing](https://www.meilisearch.com/pricing?utm_campaign=oss&utm_source=docs&utm_medium=comparison) is based on the number of documents stored and the number of search operations performed. However, Meilisearch offers a more generous free tier that allows more documents to be stored as well as fairer pricing for search usage. Meilisearch also offers a Pro tier for larger use cases to allow for more predictable pricing.
-
-## A quick look at the search engine landscape
-
-### Open source
-
-#### Lucene
-
-Apache Lucene is a free and open-source search library used for indexing and searching full-text documents. It was created in 1999 by Doug Cutting, who had previously written search engines at Xerox's Palo Alto Research Center (PARC) and Apple. Written in Java, Lucene was developed to build web search applications such as Google and DuckDuckGo, the last of which still uses Lucene for certain types of searches.
-
-Lucene has since been divided into several projects:
-
-- **Lucene itself**: the full-text search library.
-- **Solr**: an enterprise search server with a powerful REST API.
-- **Nutch**: an extensible and scalable web crawler relying on Apache Hadoop.
-
-Since Lucene is the technology behind many open source or closed source search engines, it is considered as the reference search library.
-
-#### Sonic
-
-Sonic is a lightweight and schema-less search index server written in Rust. Sonic cannot be considered as an out-of-the-box solution, and compared to Meilisearch, it does not ensure relevancy ranking. Instead of storing documents, it comprises an inverted index with a Levenshtein automaton. This means any application querying Sonic has to retrieve the search results from an external database using the returned IDs and then apply some relevancy ranking.
-
-Its ability to run on a few MBs of RAM makes it a minimalist and resource-efficient alternative to database tools that can be too heavyweight to scale.
-
-#### Typesense
-
-Like Meilisearch, Typesense is a lightweight open-source search engine optimized for speed. To better understand how it compares with Meilisearch, refer to our [blog post on Typesense](https://blog.meilisearch.com/meilisearch-vs-typesense/?utm_campaign=oss&utm_source=docs&utm_medium=comparison).
-
-#### Lucene derivatives
-
-#### Lucene-Solr
-
-Solr is a subproject of Apache Lucene, created in 2004 by Yonik Seeley, and is today one of the most widely used search engines available worldwide. Solr is a search platform, written in Java, and built on top of Lucene. In other words, Solr is an HTTP wrapper around Lucene's Java API, meaning you can leverage all the features of Lucene by using it. In addition, Solr server is combined with Solr Cloud, providing distributed indexing and searching capabilities, thus ensuring high availability and scalability. Data is shared but also automatically replicated.
-Furthermore, Solr is not only a search engine; it is often used as a document-structured NoSQL database. Documents are stored in collections, which can be comparable to tables in a relational database.
-
-Due to its extensible plugin architecture and customizable features, Solr is a search engine with an endless number of use cases even though, since it can index and search documents and email attachments, it is specifically popular for enterprise search.
-
-#### Bleve & Tantivy
-
-Bleve and Tantivy are search engine projects, respectively written in Golang and Rust, inspired by Apache Lucene and its algorithms (for example, tf-idf, short for term frequency-inverse document frequency). Such as Lucene, both are libraries to be used for any search project; however they are not ready-to-use APIs.
-
-### Open source (Elasticsearch)
-
-#### Elasticsearch
-
-Elasticsearch is a search engine based on the Lucene library and is most popular for full-text search. It provides a REST API accessed by JSON over HTTP. Since August 2024, Elasticsearch is available under a triple license (AGPLv3 / SSPL / ELv2), making it open source again. One of its key options, called index sharding, gives you the ability to divide indexes into physical spaces in order to increase performance and ensure high availability. Both Lucene and Elasticsearch have been designed for processing high-volume data streams, analyzing logs, and running complex queries. You can perform operations and analysis (for example, calculate the average age of all users named "Thomas") on documents that match a specified query.
-
-Today, Lucene and Elasticsearch are dominant players in the search engine landscape. They both are solid solutions for a lot of different use cases in search, and also for building your own recommendation engine. They are good general products, but they require to be configured properly to get similar results to those of Meilisearch or Algolia.
-
-### Closed source
-
-#### Algolia
-
-Algolia is a company providing a search engine on a SaaS model. Its software is closed source. In its early stages, Algolia offered mobile search engines that could be embedded in apps, facing the challenge of implementing the search algorithms from scratch. From the very beginning, the decision was made to build a search engine directly dedicated to the end-users, specifically, implementing search within mobile apps or websites.
-Algolia successfully demonstrated over the past few years how critical tolerating typos was in order to improve the users' experience, and in the same way, its impact on reducing bounce rate and increasing conversion.
-
-Apart from Algolia, a wide choice of SaaS products are available on the Search Engine Market. Most of them use Elasticsearch and fine-tune its settings in order to have a custom and personalized solution.
-
-#### Swiftype
-
-Swiftype is a search service provider specialized in website search and analytics. Swiftype was founded in 2012 by Matt Riley and Quin Hoxie, and is now owned by Elastic since November 2017. It is an end-to-end solution built on top of Elasticsearch, meaning it has the ability to leverage the Elastic Stack.
-
-#### Doofinder
-
-Doofinder is a paid on-site search service that is developed to integrate into any website with very little configuration. Doofinder is used by online stores to increase their sales, aiming to facilitate the purchase process.
-
-## Conclusions
-
-Each Search solution fits best with the constraints of a particular use case. Since each type of search engine offers a unique set of features, it wouldn't be easy nor relevant to compare their performance. For instance, it wouldn't be fair to make a comparison of speed between Elasticsearch and Algolia over a product-based database. The same goes for a very large full text-based database.
-
-We cannot, therefore, compare ourselves with Lucene-based or other search engines targeted to specific tasks.
-
-In the particular use case we cover, the most similar solution to Meilisearch is Algolia.
-
-While Algolia offers the most advanced and powerful search features, this efficiency comes with an expensive pricing. Moreover, their service is marketed to big companies.
-
-Meilisearch is dedicated to all types of developers. Our goal is to deliver a developer-friendly tool, easy to install, and to deploy. Because providing an out-of-the-box awesome search experience for the end-users matters to us, we want to give everyone access to the best search experiences out there with minimum effort and without requiring any financial resources.
-
-Usually, when a developer is looking for a search tool to integrate into their application, they will go for ElasticSearch or less effective choices. Even if Elasticsearch is not best suited for this use case, it remains a great source available solution. However, it requires technical know-how to execute advanced features and hence more time to customize it to your business.
-
-We aim to become the default solution for developers.
diff --git a/resources/help/experimental_features_overview.mdx b/resources/help/experimental_features_overview.mdx
index 3b2b306a80..0f2044dfb5 100644
--- a/resources/help/experimental_features_overview.mdx
+++ b/resources/help/experimental_features_overview.mdx
@@ -53,8 +53,8 @@ Activating or deactivating experimental features this way does not require you t
| [Search queue size](/resources/self_hosting/configuration/overview) | Configure maximum number of concurrent search requests | CLI flag or environment variable |
| [Drop search after](/resources/self_hosting/configuration/overview) | Drop irrelevant search requests after a configurable timeout (default: 60s) | CLI flag or environment variable |
| [Searches per core](/resources/self_hosting/configuration/overview) | Configure number of concurrent search requests per CPU core (default: 4) | CLI flag or environment variable |
-| [`CONTAINS` filter operator](/learn/filtering_and_sorting/filter_expression_reference#contains) | Enables usage of `CONTAINS` with the `filter` search parameter | CLI flag or environment variable, API route |
-| [Edit documents with function](/reference/api/documents/edit-documents-by-function) | Use a RHAI function to edit documents directly in the Meilisearch database | API route |
+| [`CONTAINS` filter operator](/capabilities/filtering_sorting_faceting/advanced/filter_expression_syntax#contains) | Enables usage of `CONTAINS` with the `filter` search parameter | CLI flag or environment variable, API route |
+| [Edit documents with function](/capabilities/indexing/how_to/edit_documents_with_functions) | Use a [Rhai](https://rhai.rs/book/) function to edit documents directly in the Meilisearch database | API route |
| [`/network` route](/reference/api/network/get-network) | Enable `/network` route | API route |
| [Dumpless upgrade](/resources/self_hosting/configuration/reference#dumpless-upgrade) | Upgrade Meilisearch without generating a dump | API route |
| [Composite embedders](/reference/api/settings/get-embedders) | Enable composite embedders | API route |
@@ -66,4 +66,4 @@ Activating or deactivating experimental features this way does not require you t
| [Multimodal search](/reference/api/settings/list-all-settings) | Enable multimodal search | API route |
| [Disable new indexer](/resources/self_hosting/configuration/overview) | Use previous settings indexer | CLI flag or environment variable |
| [Allowed IP networks](/resources/self_hosting/configuration/overview) | Override default IP policy with allowed CIDR ranges | CLI flag or environment variable |
-| [Search personalization](/learn/personalization/making_personalized_search_queries) | Enables search personalization | CLI flag or environment variable |
+| [Search personalization](/capabilities/personalization/getting_started) | Enables search personalization | CLI flag or environment variable |
diff --git a/resources/help/faq.mdx b/resources/help/faq.mdx
index 686fb7042f..418196a37d 100644
--- a/resources/help/faq.mdx
+++ b/resources/help/faq.mdx
@@ -78,11 +78,11 @@ Your document upload likely failed. Check the status of the task using the retur
## Is killing a Meilisearch process safe?
-Yes. Killing Meilisearch is **safe**, even during indexing. When you restart, it resumes the task from the beginning. See the [asynchronous operations guide](/learn/async/asynchronous_operations) for more details.
+Yes. Killing Meilisearch is **safe**, even during indexing. When you restart, it resumes the task from the beginning. See the [asynchronous operations guide](/capabilities/indexing/tasks_and_batches/async_operations) for more details.
## Can I use Meilisearch for multi-tenant applications?
-Yes. Meilisearch supports [multitenancy with tenant tokens](/learn/security/multitenancy_tenant_tokens), which let you control which documents each user can search without maintaining separate indexes.
+Yes. Meilisearch supports [multitenancy with tenant tokens](/capabilities/security/overview), which let you control which documents each user can search without maintaining separate indexes.
## What are the hardware requirements for self-hosting?
diff --git a/resources/help/language.mdx b/resources/help/language.mdx
index a6626dc978..b42908bae2 100644
--- a/resources/help/language.mdx
+++ b/resources/help/language.mdx
@@ -32,21 +32,22 @@ Languages not listed above still work with Meilisearch. Any language that uses w
We aim to provide global language support, and your feedback helps us move closer to that goal. If you notice inconsistencies in your search results or the way your documents are processed, please [open an issue in the Meilisearch repository](https://github.com/meilisearch/meilisearch/issues/new/choose).
-[Read more about our tokenizer](/learn/indexing/tokenization)
+[Read more about our tokenizer](/capabilities/indexing/advanced/tokenization)
## Multilingual hybrid search
-Meilisearch's keyword-based search relies on Charabia for tokenization, but [hybrid search](/learn/ai_powered_search/getting_started_with_ai_search) and [semantic search](/learn/ai_powered_search/difference_full_text_ai_search) use embedding models that can handle languages independently of the tokenizer.
+Meilisearch's keyword-based search relies on Charabia for tokenization, but [hybrid search](/capabilities/hybrid_search/getting_started) and [semantic search](/capabilities/hybrid_search/overview) use embedding models that can handle languages independently of the tokenizer.
Many embedding providers offer multilingual models that work across 100+ languages out of the box:
| Provider | Multilingual model | Dimensions |
|---|---|---|
-| [Cohere](/guides/embedders/cohere) | `embed-multilingual-v3.0` | 1024 |
-| [Cohere](/guides/embedders/cohere) | `embed-multilingual-light-v3.0` | 384 |
-| [Voyage AI](/guides/embedders/voyage) | `voyage-multilingual-2` | 1024 |
-| [AWS Bedrock](/guides/embedders/bedrock) | `cohere.embed-multilingual-v3` | 1024 |
-| [Hugging Face](/guides/embedders/huggingface) | `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2` | 384 |
+| [Cohere](/capabilities/hybrid_search/how_to/configure_cohere_embedder) | `embed-v4.0` | 256, 512, 1,024, or 1,536 |
+| [Cohere](/capabilities/hybrid_search/how_to/configure_cohere_embedder) | `embed-multilingual-v3.0` | 1,024 |
+| [Voyage AI](/capabilities/hybrid_search/providers/voyage) | `voyage-4` | 256, 512, 1,024, or 2,048 |
+| [Jina](/capabilities/hybrid_search/providers/jina) | `jina-embeddings-v4` | 128, 256, 512, 1,024, or 2,048 |
+| [AWS Bedrock](/capabilities/hybrid_search/providers/bedrock) | `cohere.embed-v4:0` | 256, 512, 1,024, or 1,536 |
+| [Hugging Face](/capabilities/hybrid_search/providers/huggingface) | `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2` | 384 |
Using a multilingual embedding model allows you to:
@@ -54,10 +55,10 @@ Using a multilingual embedding model allows you to:
- **Simplify multilingual indexing**: instead of creating one index per language, a single index with a multilingual embedder can serve multiple languages.
- **Complement keyword search**: combine Charabia's keyword tokenization with semantic embeddings in hybrid search for the best of both approaches.
-For multilingual datasets, consider using [hybrid search](/learn/ai_powered_search/getting_started_with_ai_search) with a multilingual embedder alongside [localized attributes](/reference/api/settings/get-localizedattributes) for keyword matching. This gives you accurate tokenization per language for keyword search and cross-language understanding for semantic search.
+For multilingual datasets, consider using [hybrid search](/capabilities/hybrid_search/getting_started) with a multilingual embedder alongside [localized attributes](/reference/api/settings/get-localizedattributes) for keyword matching. This gives you accurate tokenization per language for keyword search and cross-language understanding for semantic search.
-For guidance on structuring multilingual datasets, see [Handling multilingual datasets](/learn/indexing/multilingual-datasets).
+For guidance on structuring multilingual datasets, see [Handling multilingual datasets](/capabilities/indexing/how_to/handle_multilingual_data).
## Improving our language support
@@ -76,7 +77,7 @@ Optimized support for a language means Meilisearch has implemented internal proc
### My language does not use whitespace to separate words. Can I still use Meilisearch?
-Yes. For keyword search, results may be less relevant than for fully optimized languages. However, you can use [hybrid search](/learn/ai_powered_search/getting_started_with_ai_search) with a multilingual embedding model to get strong semantic results regardless of tokenization support.
+Yes. For keyword search, results may be less relevant than for fully optimized languages. However, you can use [hybrid search](/capabilities/hybrid_search/getting_started) with a multilingual embedding model to get strong semantic results regardless of tokenization support.
### My language does not use the Roman alphabet. Can I still use Meilisearch?
diff --git a/resources/help/sdks.mdx b/resources/help/sdks.mdx
index c1e15d2b0c..4ad3f1ea1a 100644
--- a/resources/help/sdks.mdx
+++ b/resources/help/sdks.mdx
@@ -48,7 +48,7 @@ You can use Meilisearch API wrappers in your favorite language. These libraries
## AI Assistant tools
- [meilisearch-mcp](https://github.com/meilisearch/meilisearch-mcp): Model Context Protocol server for integrating Meilisearch with AI assistants and tools
- - Guide: [Model Context Protocol integration](/guides/ai/mcp)
+ - Guide: [Model Context Protocol integration](/getting_started/integrations/mcp)
## Other tools
diff --git a/resources/internals/bucket_sort.mdx b/resources/internals/bucket_sort.mdx
index 8d37de597a..5b65f2d92d 100644
--- a/resources/internals/bucket_sort.mdx
+++ b/resources/internals/bucket_sort.mdx
@@ -8,7 +8,7 @@ Meilisearch uses **bucket sort** to rank search results. This algorithm distribu
## How bucket sort works in Meilisearch
-When you search, Meilisearch doesn't score documents with a single number. Instead, it applies [ranking rules](/learn/relevancy/ranking_rules) sequentially, sorting documents into buckets at each step.
+When you search, Meilisearch doesn't score documents with a single number. Instead, it applies [ranking rules](/capabilities/full_text_search/relevancy/ranking_rules) sequentially, sorting documents into buckets at each step.
### Example: Searching for "Badman dark knight returns"
@@ -67,7 +67,7 @@ You can reorder, add, or remove ranking rules:
```bash
curl -X PUT "${MEILISEARCH_URL}/indexes/movies/settings/ranking-rules" \
- -H "Authorization: Bearer ${MEILISEARCH_API_KEY}" \
+ -H "Authorization: Bearer ${MEILISEARCH_KEY}" \
-H "Content-Type: application/json" \
--data-binary '[
"words",
@@ -85,6 +85,6 @@ Adding `release_date:desc` as a custom rule means newer movies rank higher when
## Related concepts
-- [Ranking rules](/learn/relevancy/ranking_rules): Configure ranking behavior
-- [Ranking score](/learn/relevancy/ranking_score): Understanding search relevance scores
-- [Custom ranking rules](/learn/relevancy/custom_ranking_rules): Add business logic to ranking
+- [Ranking rules](/capabilities/full_text_search/relevancy/ranking_rules): Configure ranking behavior
+- [Ranking score](/capabilities/full_text_search/relevancy/ranking_score): Understanding search relevance scores
+- [Custom ranking rules](/capabilities/full_text_search/relevancy/custom_ranking_rules): Add business logic to ranking
diff --git a/resources/internals/datatypes.mdx b/resources/internals/datatypes.mdx
index fe56f2bd48..d76ca8eb5b 100644
--- a/resources/internals/datatypes.mdx
+++ b/resources/internals/datatypes.mdx
@@ -41,7 +41,7 @@ Meilisearch comes with a number of general-use dictionaries for its officially s
### Distance
-Distance plays an essential role in determining whether documents are relevant since [one of the ranking rules is the **proximity** rule](/learn/relevancy/relevancy). The proximity rule sorts the results by increasing distance between matched query terms. Then, two words separated by a soft space are closer and thus considered **more relevant** than two words separated by a hard space.
+Distance plays an essential role in determining whether documents are relevant since [one of the ranking rules is the **proximity** rule](/capabilities/full_text_search/relevancy/relevancy). The proximity rule sorts the results by increasing distance between matched query terms. Then, two words separated by a soft space are closer and thus considered **more relevant** than two words separated by a hard space.
After the tokenizing process, each word is indexed and stored in the global dictionary of the corresponding index.
@@ -76,9 +76,15 @@ When making a query on `Bruce Willis`, `002` will be the first document returned
A numeric type (`integer`, `float`) is converted to a human-readable decimal number string representation. Numeric types can be searched as they are converted to strings.
-You can add [custom ranking rules](/learn/relevancy/custom_ranking_rules) to create an ascending or descending sorting rule on a given attribute that has a numeric value in the documents.
+You can add [custom ranking rules](/capabilities/full_text_search/relevancy/custom_ranking_rules) to create an ascending or descending sorting rule on a given attribute that has a numeric value in the documents.
-You can also create [filters](/learn/filtering_and_sorting/filter_search_results). The `>`, `>=`, `<`, `<=`, and `TO` relational operators apply only to numerical values.
+You can also create [filters](/capabilities/filtering_sorting_faceting/getting_started). The `>`, `>=`, `<`, `<=`, and `TO` relational operators apply only to numerical values.
+
+### Floating-point precision
+
+Meilisearch stores all numeric values as 64-bit IEEE 754 floating-point numbers (`f64`). This format provides up to approximately 15 significant decimal digits of precision.
+
+As a consequence, very large integers (beyond 2^53, or 9,007,199,254,740,992) may lose precision when stored in Meilisearch. If your dataset includes large integer identifiers or high-precision decimal values, consider storing them as strings instead to preserve their exact representation.
## Boolean
@@ -144,7 +150,7 @@ During indexing, Meilisearch uses dot notation to eliminate nested fields:
}
```
-Using dot notation, no information is lost when flattening nested objects, regardless of nesting depth.
+Using dot notation, no information is lost when flattening nested objects, regardless of nesting depth. Dot notation also works with arrays of objects. For example, if a document contains `"items": [{"name": "foo"}, {"name": "bar"}]`, Meilisearch flattens this to `"items.name": ["foo", "bar"]`. You can use `items.name` when configuring searchable, filterable, or sortable attributes to access these nested values.
Imagine that the example document above includes an additional object, `address`, containing home and work addresses, each of which are objects themselves. After flattening, the document would look like this:
@@ -292,6 +298,45 @@ The best way to work around this limitation is reformatting your data. The above
Object fields cannot be partially updated. Updating an object field with either the `PUT` or `POST` routes with an object fully replaces that value and removes any omitted subfields. Dot notation is also not supported when updating a document.
+## Reserved field: `_vectors`
+
+When using [AI-powered search](/capabilities/hybrid_search/overview), documents can contain a special `_vectors` field. This reserved field stores embedding data for one or more configured embedders.
+
+The `_vectors` field is an object where each key corresponds to a configured embedder name. Values can use one of two formats:
+
+**Simple format** (array of numbers):
+
+```json
+{
+ "id": 1,
+ "title": "A great movie",
+ "_vectors": {
+ "my_embedder": [0.1, 0.2, 0.3, 0.4]
+ }
+}
+```
+
+**Explicit format** (object with `embeddings` and `regenerate`):
+
+```json
+{
+ "id": 1,
+ "title": "A great movie",
+ "_vectors": {
+ "my_embedder": {
+ "embeddings": [[0.1, 0.2, 0.3, 0.4]],
+ "regenerate": false
+ }
+ }
+}
+```
+
+In the explicit format, `embeddings` is an array of arrays (supporting multiple embeddings per document), and `regenerate` controls whether Meilisearch should regenerate the embedding when the document is updated. Set `regenerate` to `false` when you provide your own embeddings and do not want Meilisearch to overwrite them.
+
+
+The `_vectors` field is only relevant when you have configured at least one [embedder](/reference/api/settings/update-embedders) for your index. If no embedder is configured, `_vectors` is treated as a regular field.
+
+
## Possible tokenization issues
Even if it behaves exactly as expected, the tokenization process may lead to counterintuitive results in some cases, such as:
@@ -304,4 +349,4 @@ Even if it behaves exactly as expected, the tokenization process may lead to cou
For the two strings above, the full stops `.` will be considered as hard spaces.
-`10,3` will be broken into two strings—`10` and `3`—instead of being processed as a numeric type.
+`10,3` will be broken into two strings (`10` and `3`) instead of being processed as a numeric type.
diff --git a/resources/internals/documents.mdx b/resources/internals/documents.mdx
index 83e80494da..39de74d80f 100644
--- a/resources/internals/documents.mdx
+++ b/resources/internals/documents.mdx
@@ -35,10 +35,10 @@ If the value is a string, it **[can contain at most 65535 positions](/resources/
If a field contains an object, Meilisearch flattens it during indexing using dot notation and brings the object's keys and values to the root level of the document itself. This flattened object is only an intermediary representation—you will get the original structure upon search. You can read more about this in our [dedicated guide](/resources/internals/datatypes#objects).
-With [ranking rules](/learn/relevancy/ranking_rules), you can decide which fields are more relevant than others. For example, you may decide recent movies should be more relevant than older ones. You can also designate certain fields as displayed or searchable.
+With [ranking rules](/capabilities/full_text_search/relevancy/ranking_rules), you can decide which fields are more relevant than others. For example, you may decide recent movies should be more relevant than older ones. You can also designate certain fields as displayed or searchable.
-Some features require Meilisearch to reserve attributes. For example, to use [geosearch functionality](/learn/filtering_and_sorting/geosearch) your documents must include a `_geo` field.
+Some features require Meilisearch to reserve attributes. For example, to use [geosearch functionality](/capabilities/geo_search/getting_started) your documents must include a `_geo` field.
Reserved attributes are always prefixed with an underscore (`_`).
@@ -53,9 +53,9 @@ You can modify this behavior using the [update settings endpoint](/reference/api
- Displayed but not searchable
- Neither displayed nor searchable
-In the latter case, the field will be completely ignored during search. However, it will still be [stored](/learn/relevancy/displayed_searchable_attributes#data-storing) in the document.
+In the latter case, the field will be completely ignored during search. However, it will still be [stored](/capabilities/full_text_search/how_to/configure_displayed_attributes#data-storing) in the document.
-To learn more, refer to our [displayed and searchable attributes guide](/learn/relevancy/displayed_searchable_attributes).
+To learn more, refer to our [displayed and searchable attributes guide](/capabilities/full_text_search/how_to/configure_displayed_attributes).
## Primary field
diff --git a/resources/internals/hannoy.mdx b/resources/internals/hannoy.mdx
index 4483978074..53a1ad9678 100644
--- a/resources/internals/hannoy.mdx
+++ b/resources/internals/hannoy.mdx
@@ -172,7 +172,7 @@ This can reduce initial search latency by several milliseconds.
## Related concepts
-- [AI-powered search](/learn/ai_powered_search/getting_started_with_ai_search): Using vector search in Meilisearch
+- [AI-powered search](/capabilities/hybrid_search/getting_started): Using vector search in Meilisearch
- [Storage](/resources/internals/storage): The LMDB storage backend
## Next steps
diff --git a/resources/internals/indexes.mdx b/resources/internals/indexes.mdx
index cf58aa4621..ed44833b63 100644
--- a/resources/internals/indexes.mdx
+++ b/resources/internals/indexes.mdx
@@ -69,7 +69,7 @@ By default, every document field is searchable and displayed in response to sear
You can update these field attributes using the [update settings endpoint](/reference/api/settings/update-all-settings), or the respective endpoints for [displayed attributes](/reference/api/settings/update-displayedattributes) and [searchable attributes](/reference/api/settings/update-searchableattributes).
-[Learn more about displayed and searchable attributes.](/learn/relevancy/displayed_searchable_attributes)
+[Learn more about displayed and searchable attributes.](/capabilities/full_text_search/how_to/configure_displayed_attributes)
### Distinct attribute
@@ -77,7 +77,7 @@ If your dataset contains multiple similar documents, you may want to return only
Designate the distinct attribute using the [update settings endpoint](/reference/api/settings/update-all-settings) or the [update distinct attribute endpoint](/reference/api/settings/update-distinctattribute). **You can only set one field as the distinct attribute per index.**
-[Learn more about distinct attributes.](/learn/relevancy/distinct_attribute)
+[Learn more about distinct attributes.](/capabilities/full_text_search/how_to/configure_distinct_attribute)
### Faceting
@@ -85,7 +85,7 @@ Facets are a specific use-case of filters in Meilisearch: whether something is a
By default, Meilisearch returns `100` facet values for each faceted field. You can change this using the [update settings endpoint](/reference/api/settings/update-all-settings) or the [update faceting settings endpoint](/reference/api/settings/update-facetsearch).
-[Learn more about faceting.](/learn/filtering_and_sorting/search_with_facet_filters)
+[Learn more about faceting.](/capabilities/filtering_sorting_faceting/how_to/filter_with_facets)
### Filterable attributes
@@ -93,13 +93,13 @@ Filtering allows you to refine your search based on different categories. For ex
Before filtering on any document attribute, you must add it to `filterableAttributes` using the [update settings endpoint](/reference/api/settings/update-all-settings) or the [update filterable attributes endpoint](/reference/api/settings/update-filterableattributes). Then, make a search query using the [`filter` search parameter](/reference/api/search/search-with-post#body-filter).
-[Learn more about filtering.](/learn/filtering_and_sorting/filter_search_results)
+[Learn more about filtering.](/capabilities/filtering_sorting_faceting/getting_started)
### Pagination
To protect your database from malicious scraping, Meilisearch only returns up to `1000` results for a search query. You can change this limit using the [update settings endpoint](/reference/api/settings/update-all-settings) or the [update pagination settings endpoint](/reference/api/settings/update-pagination).
-[Learn more about pagination.](/guides/front_end/pagination)
+[Learn more about pagination.](/capabilities/full_text_search/how_to/paginate_search_results)
### Ranking rules
@@ -107,7 +107,7 @@ Meilisearch uses ranking rules to sort matching documents so that the most relev
You can alter this order or define custom ranking rules to return certain results first. This can be done using the [update settings endpoint](/reference/api/settings/update-all-settings) or the [update ranking rules endpoint](/reference/api/settings/update-rankingrules).
-[Learn more about ranking rules.](/learn/relevancy/relevancy)
+[Learn more about ranking rules.](/capabilities/full_text_search/relevancy/relevancy)
### Sortable attributes
@@ -115,7 +115,7 @@ By default, Meilisearch orders results according to their relevancy. You can alt
Add the attributes you'd like to sort by to `sortableAttributes` using the [update settings endpoint](/reference/api/settings/update-all-settings) or the [update sortable attributes endpoint](/reference/api/settings/update-sortableattributes). You can then use the [`sort` search parameter](/reference/api/search/search-with-post#body-sort) to sort your results in ascending or descending order.
-[Learn more about sorting.](/learn/filtering_and_sorting/sort_search_results)
+[Learn more about sorting.](/capabilities/filtering_sorting_faceting/how_to/sort_results)
### Stop words
@@ -131,7 +131,7 @@ Your dataset may contain words with similar meanings. For these, you can define
Since synonyms are defined for a given index, they won't apply to any other index on the same Meilisearch instance. You can create your list of synonyms using the [update settings endpoint](/reference/api/settings/update-all-settings) or the [update synonyms endpoint](/reference/api/settings/update-synonyms).
-[Learn more about synonyms.](/learn/relevancy/synonyms)
+[Learn more about synonyms.](/capabilities/full_text_search/relevancy/synonyms)
### Typo tolerance
@@ -144,7 +144,7 @@ Typo tolerance is a built-in feature that helps you find relevant results even w
You can update the typo tolerance settings using the [update settings endpoint](/reference/api/settings/update-all-settings) or the [update typo tolerance endpoint](/reference/api/settings/update-typotolerance).
-[Learn more about typo tolerance.](/learn/relevancy/typo_tolerance_settings)
+[Learn more about typo tolerance.](/capabilities/full_text_search/relevancy/typo_tolerance_settings)
## Swapping indexes
diff --git a/resources/internals/prefix.mdx b/resources/internals/prefix.mdx
index 04d19fbcf0..68e7cabbf8 100644
--- a/resources/internals/prefix.mdx
+++ b/resources/internals/prefix.mdx
@@ -6,7 +6,7 @@ description: Prefix search is a core part of Meilisearch's design and allows use
In Meilisearch, **you can perform a search with only a single letter as your query**. This is because we follow the philosophy of **prefix search**.
-Prefix search is when document sorting starts by comparing the search query against the beginning of each word in your dataset. All documents with words that match the query term are added to the [bucket sort](https://en.wikipedia.org/wiki/Bucket_sort), before the [ranking rules](/learn/relevancy/ranking_rules) are applied sequentially.
+Prefix search is when document sorting starts by comparing the search query against the beginning of each word in your dataset. All documents with words that match the query term are added to the [bucket sort](https://en.wikipedia.org/wiki/Bucket_sort), before the [ranking rules](/capabilities/full_text_search/relevancy/ranking_rules) are applied sequentially.
In other words, prefix search means that it's not necessary to type a word in its entirety to find documents containing that word—you can just type the first one or two letters.
@@ -36,7 +36,7 @@ response:
- `show`
-Meilisearch also handles typos while performing the prefix search. You can [read more about the typo rules on the dedicated page](/learn/relevancy/typo_tolerance_settings).
+Meilisearch also handles typos while performing the prefix search. You can [read more about the typo rules on the dedicated page](/capabilities/full_text_search/relevancy/typo_tolerance_settings).
### Disabling prefix search
diff --git a/resources/internals/ranking.mdx b/resources/internals/ranking.mdx
index aa1efdd1c8..babac48555 100644
--- a/resources/internals/ranking.mdx
+++ b/resources/internals/ranking.mdx
@@ -91,7 +91,7 @@ This is called **lexicographic ordering** — the same logic humans use to sort
| 6 | **wordPosition** | Position of match within the attribute | Matching at the start of a title beats matching at the end |
| 7 | **exactness** | Exact match vs prefix/typo match | "knight" exactly beats "knights" (prefix) |
-You can [reorder, add, or remove](/learn/relevancy/ranking_rules) any of these rules. You can also add [custom ranking rules](/learn/relevancy/custom_ranking_rules) that incorporate business logic — like boosting newer products or higher-rated items.
+You can [reorder, add, or remove](/capabilities/full_text_search/relevancy/ranking_rules) any of these rules. You can also add [custom ranking rules](/capabilities/full_text_search/relevancy/custom_ranking_rules) that incorporate business logic — like boosting newer products or higher-rated items.
## Why this is better for application search
@@ -127,7 +127,7 @@ A match in `title` **always** outranks a match in `description` (assuming previo
### 4. Ranking is transparent and debuggable
-BM25 produces opaque scores. Meilisearch lets you inspect exactly why a document ranks where it does using [`showRankingScoreDetails`](/learn/relevancy/ranking_score):
+BM25 produces opaque scores. Meilisearch lets you inspect exactly why a document ranks where it does using [`showRankingScoreDetails`](/capabilities/full_text_search/relevancy/ranking_score):
```json
{
@@ -160,13 +160,13 @@ Meilisearch's approach is optimized for application and site search. There are s
| :--- | :--- | :--- |
| **Log analytics** | Better — term frequency matters for finding error patterns | Not designed for this use case |
| **Academic paper search** | Better — TF-IDF identifies topically relevant papers | Optimized for short, user-facing queries |
-| **Documents > 10KB** | Handles naturally | Best with documents [split into smaller chunks](/guides/improve_relevancy_large_documents) |
+| **Documents > 10KB** | Handles naturally | Best with documents [split into smaller chunks](/capabilities/full_text_search/relevancy/relevancy#chunking-large-documents) |
| **Custom scoring formulas** | Fully customizable via script scores | Fixed rule set with configurable order |
| **Billions of documents** | Horizontally scalable | Designed for millions of documents per index |
## Combining ranking with semantic search
-Meilisearch's ranking system works alongside [hybrid search](/learn/ai_powered_search/getting_started_with_ai_search). When you enable an [embedder](/learn/ai_powered_search/getting_started_with_ai_search), Meilisearch combines keyword-based ranking (the rules above) with vector similarity in a single query:
+Meilisearch's ranking system works alongside [hybrid search](/capabilities/hybrid_search/getting_started). When you enable an [embedder](/capabilities/hybrid_search/getting_started), Meilisearch combines keyword-based ranking (the rules above) with vector similarity in a single query:
```json
{
@@ -196,8 +196,8 @@ The `semanticRatio` controls the blend: `0.0` uses only the multi-criteria ranki
## Learn more
-- [Ranking rules](/learn/relevancy/ranking_rules) — Configure and reorder the seven built-in rules
+- [Ranking rules](/capabilities/full_text_search/relevancy/ranking_rules) — Configure and reorder the seven built-in rules
- [Bucket sort](/resources/internals/bucket_sort) — How the bucket sort algorithm works
-- [Ranking score](/learn/relevancy/ranking_score) — Understanding the 0.0–1.0 ranking score
-- [Custom ranking rules](/learn/relevancy/custom_ranking_rules) — Add business logic to ranking
-- [Ordering ranking rules](/guides/relevancy/ordering_ranking_rules) — Best practices for rule ordering
+- [Ranking score](/capabilities/full_text_search/relevancy/ranking_score) — Understanding the 0.0–1.0 ranking score
+- [Custom ranking rules](/capabilities/full_text_search/relevancy/custom_ranking_rules) — Add business logic to ranking
+- [Ordering ranking rules](/capabilities/full_text_search/relevancy/ranking_rules#ordering-ranking-rules) — Best practices for rule ordering
diff --git a/resources/migration/algolia_migration.mdx b/resources/migration/algolia_migration.mdx
index 1b7e80f74b..b44e2aa432 100644
--- a/resources/migration/algolia_migration.mdx
+++ b/resources/migration/algolia_migration.mdx
@@ -412,7 +412,7 @@ The below table compares Algolia's **API parameters** with the equivalent Meilis
| Algolia | Meilisearch | Type |
| :--- | :--- | :--- |
-| `analytics` / `clickAnalytics` | Separate [Analytics API](/learn/analytics/events_endpoint) | — |
+| `analytics` / `clickAnalytics` | Separate [Analytics API](/capabilities/analytics/advanced/events_endpoint) | — |
| `disablePrefixOnAttributes` | Not supported | — |
| `relevancyStrictness` | `rankingScoreThreshold` | param |
diff --git a/resources/migration/migrating_cloud.mdx b/resources/migration/migrating_cloud.mdx
index a34f1f2f13..311d39a0d6 100644
--- a/resources/migration/migrating_cloud.mdx
+++ b/resources/migration/migrating_cloud.mdx
@@ -22,7 +22,7 @@ To export a dump, make sure your self-hosted Meilisearch instance is running. Th
-Meilisearch will return a summarized task object and begin creating the dump. [Use the returned object's `taskUid` to monitor its progress.](/learn/async/asynchronous_operations)
+Meilisearch will return a summarized task object and begin creating the dump. [Use the returned object's `taskUid` to monitor its progress.](/capabilities/indexing/tasks_and_batches/async_operations)
Once the task has been completed, you can find the dump in your project's dump directory. By default, this is `/dumps`.
diff --git a/resources/migration/mongodb_migration.mdx b/resources/migration/mongodb_migration.mdx
index f2cdb826b7..e6c3fa5018 100644
--- a/resources/migration/mongodb_migration.mdx
+++ b/resources/migration/mongodb_migration.mdx
@@ -492,7 +492,7 @@ If you used MongoDB Atlas Vector Search (`$vectorSearch`), you can replace it wi
This means you can **remove all embedding logic from your application code**. Instead of calling an embedding API, computing vectors, and sending them alongside your aggregation pipeline, you simply send documents and text queries to Meilisearch.
-Configure an [embedder](/learn/ai_powered_search/getting_started_with_ai_search) source such as OpenAI, HuggingFace, or a custom REST endpoint:
+Configure an [embedder](/capabilities/hybrid_search/getting_started) source such as OpenAI, HuggingFace, or a custom REST endpoint:
```bash
curl -X PATCH 'MEILI_HOST/indexes/MEILI_INDEX_NAME/settings' \
@@ -512,7 +512,7 @@ curl -X PATCH 'MEILI_HOST/indexes/MEILI_INDEX_NAME/settings' \
The `documentTemplate` controls what text is sent to the embedding model. Adjust it to match the fields in your documents. Meilisearch will automatically embed all existing documents and keep vectors up to date as you add, update, or delete documents.
-For more options including HuggingFace models, Ollama, and custom REST endpoints, see [configuring embedders](/learn/ai_powered_search/getting_started_with_ai_search).
+For more options including HuggingFace models, Ollama, and custom REST endpoints, see [configuring embedders](/capabilities/hybrid_search/getting_started).
If you already have precomputed vectors stored alongside your MongoDB documents and want to keep them, you can include them in the `_vectors` field during migration and configure a `userProvided` embedder:
diff --git a/resources/migration/postgresql_migration.mdx b/resources/migration/postgresql_migration.mdx
index 518b6d3c03..0e65ff2891 100644
--- a/resources/migration/postgresql_migration.mdx
+++ b/resources/migration/postgresql_migration.mdx
@@ -647,7 +647,7 @@ The most important difference: **PostgreSQL has no typo tolerance**. A search fo
### Configure embedders for hybrid search
-If you currently use pgvector for semantic similarity search, you can replace it with Meilisearch's built-in hybrid search. Configure an [embedder](/learn/ai_powered_search/getting_started_with_ai_search) and Meilisearch handles all vectorization automatically — both at indexing time and at search time. No more managing embeddings in your application code.
+If you currently use pgvector for semantic similarity search, you can replace it with Meilisearch's built-in hybrid search. Configure an [embedder](/capabilities/hybrid_search/getting_started) and Meilisearch handles all vectorization automatically — both at indexing time and at search time. No more managing embeddings in your application code.
```bash
curl -X PATCH 'MEILI_HOST/indexes/MEILI_INDEX_NAME/settings' \
@@ -665,7 +665,7 @@ curl -X PATCH 'MEILI_HOST/indexes/MEILI_INDEX_NAME/settings' \
}'
```
-The `documentTemplate` controls what text is sent to the embedding model. Adjust it to match the fields in your documents. For more options including HuggingFace models, Ollama, and custom REST endpoints, see [configuring embedders](/learn/ai_powered_search/getting_started_with_ai_search).
+The `documentTemplate` controls what text is sent to the embedding model. Adjust it to match the fields in your documents. For more options including HuggingFace models, Ollama, and custom REST endpoints, see [configuring embedders](/capabilities/hybrid_search/getting_started).
If you already have embeddings stored in a pgvector `vector` column and prefer not to re-embed, export them from PostgreSQL and include them in the `_vectors` field of each document. Then configure a `userProvided` embedder:
diff --git a/resources/migration/qdrant_migration.mdx b/resources/migration/qdrant_migration.mdx
index f42fbefd13..374ca3066d 100644
--- a/resources/migration/qdrant_migration.mdx
+++ b/resources/migration/qdrant_migration.mdx
@@ -9,7 +9,7 @@ This page aims to help current users of Qdrant make the transition to Meilisearc
## Overview
-Qdrant is a vector similarity search engine. Meilisearch combines full-text search with vector search through its [hybrid search](/learn/ai_powered_search/getting_started_with_ai_search) feature, letting you replace a separate keyword search engine and vector database with a single system.
+Qdrant is a vector similarity search engine. Meilisearch combines full-text search with vector search through its [hybrid search](/capabilities/hybrid_search/getting_started) feature, letting you replace a separate keyword search engine and vector database with a single system.
This guide walks you through exporting points from a Qdrant collection and importing them into Meilisearch using a script in JavaScript, Python, or Ruby. [You can also skip directly to the finished script](#finished-script).
@@ -218,7 +218,7 @@ Qdrant points contain an `id`, a `payload` (key-value data), and one or more `ve
Before preparing your data, decide how you want to handle vectors:
-- **Option A: Let Meilisearch re-embed** (recommended) — Configure an [embedder](/learn/ai_powered_search/getting_started_with_ai_search) in Meilisearch and let it generate vectors automatically from your document content. This is simpler and keeps your vectors in sync with your data.
+- **Option A: Let Meilisearch re-embed** (recommended) — Configure an [embedder](/capabilities/hybrid_search/getting_started) in Meilisearch and let it generate vectors automatically from your document content. This is simpler and keeps your vectors in sync with your data.
- **Option B: Keep existing vectors** — Include your Qdrant vectors in the `_vectors` field of each document using a `userProvided` embedder. This avoids re-embedding costs but requires you to manage vector updates yourself.
### Transform documents
@@ -616,7 +616,7 @@ One of the biggest differences between Qdrant and Meilisearch is how they handle
This means you can **remove all embedding logic from your application code**. Instead of calling an embedding API, computing vectors, and sending them to your search engine, you simply send documents and text queries to Meilisearch.
-Configure an [embedder](/learn/ai_powered_search/getting_started_with_ai_search) source such as OpenAI, HuggingFace, or a custom REST endpoint:
+Configure an [embedder](/capabilities/hybrid_search/getting_started) source such as OpenAI, HuggingFace, or a custom REST endpoint:
```bash
curl -X PATCH 'MEILI_HOST/indexes/MEILI_INDEX_NAME/settings' \
@@ -636,7 +636,7 @@ curl -X PATCH 'MEILI_HOST/indexes/MEILI_INDEX_NAME/settings' \
The `documentTemplate` controls what text is sent to the embedding model. Adjust it to match the fields in your documents. Meilisearch will automatically embed all existing documents and keep vectors up to date as you add, update, or delete documents.
-For more options including HuggingFace models, Ollama, and custom REST endpoints, see [configuring embedders](/learn/ai_powered_search/getting_started_with_ai_search).
+For more options including HuggingFace models, Ollama, and custom REST endpoints, see [configuring embedders](/capabilities/hybrid_search/getting_started).
If you prefer to keep your existing Qdrant vectors instead of re-embedding, you can export them (set `with_vectors: true` in the migration script) and configure a `userProvided` embedder:
diff --git a/resources/migration/supabase_migration.mdx b/resources/migration/supabase_migration.mdx
index e71c227add..ab3414f192 100644
--- a/resources/migration/supabase_migration.mdx
+++ b/resources/migration/supabase_migration.mdx
@@ -631,7 +631,7 @@ To customize your index settings, see [configuring index settings](/resources/in
### Configure embedders for hybrid search
-If you currently use Supabase Vector for semantic similarity search, you can replace the entire pipeline — embedding generation in Edge Functions, vector columns, RPC functions, pgvector indexes — with Meilisearch's built-in hybrid search. Configure an [embedder](/learn/ai_powered_search/getting_started_with_ai_search) and Meilisearch handles all vectorization automatically, both at indexing time and at search time.
+If you currently use Supabase Vector for semantic similarity search, you can replace the entire pipeline — embedding generation in Edge Functions, vector columns, RPC functions, pgvector indexes — with Meilisearch's built-in hybrid search. Configure an [embedder](/capabilities/hybrid_search/getting_started) and Meilisearch handles all vectorization automatically, both at indexing time and at search time.
```bash
curl -X PATCH 'MEILI_HOST/indexes/MEILI_INDEX_NAME/settings' \
@@ -657,7 +657,7 @@ The `documentTemplate` controls what text is sent to the embedding model. Adjust
- Any pgvector indexes (ivfflat or hnsw)
- Client-side embedding generation code
-For more options including HuggingFace models, Ollama, and custom REST endpoints, see [configuring embedders](/learn/ai_powered_search/getting_started_with_ai_search).
+For more options including HuggingFace models, Ollama, and custom REST endpoints, see [configuring embedders](/capabilities/hybrid_search/getting_started).
If you already have embeddings stored in a pgvector `vector` column and prefer not to re-embed, export them from Supabase and include them in the `_vectors` field of each document. Then configure a `userProvided` embedder:
diff --git a/resources/self_hosting/configuration/reference.mdx b/resources/self_hosting/configuration/reference.mdx
index 7ed17d0b60..4113230022 100644
--- a/resources/self_hosting/configuration/reference.mdx
+++ b/resources/self_hosting/configuration/reference.mdx
@@ -153,14 +153,13 @@ This option will trigger an error if `--import-dump` is not defined.
### Ignore dump if DB exists
-
-🚩 This option does not take any values. Assigning a value will throw an error. 🚩
-
-
**Environment variable**: `MEILI_IGNORE_DUMP_IF_DB_EXISTS`
-**CLI option**: `--ignore-dump-if-db-exists`
+**CLI option**: `--ignore-dump-if-db-exists`
+**Expected value**: a boolean (`true` or `false`)
+
+Set this option to `true` to prevent a Meilisearch instance with an existing database from throwing an error when using `--import-dump`. When enabled, the dump will be ignored and Meilisearch will launch using the existing database.
-Prevents a Meilisearch instance with an existing database from throwing an error when using `--import-dump`. Instead, the dump will be ignored and Meilisearch will launch using the existing database.
+For the environment variable, set `MEILI_IGNORE_DUMP_IF_DB_EXISTS=true`. For the CLI option, pass `--ignore-dump-if-db-exists`.
This option will trigger an error if `--import-dump` is not defined.
@@ -350,7 +349,7 @@ This command will throw an error if `--import-snapshot` is not defined.
**Default value**: `None`
**Expected value**: a URL string
-Notifies the configured URL whenever Meilisearch [finishes processing a task](/learn/async/asynchronous_operations#task-status) or batch of tasks. Meilisearch uses the URL as given, retaining any specified query parameters.
+Notifies the configured URL whenever Meilisearch [finishes processing a task](/capabilities/indexing/tasks_and_batches/async_operations#task-status) or batch of tasks. Meilisearch uses the URL as given, retaining any specified query parameters.
The webhook payload contains the list of finished tasks in [ndjson](https://github.com/ndjson/ndjson-spec). For more information, [consult the dedicated task webhook guide](/resources/self_hosting/webhooks).
@@ -477,15 +476,6 @@ Sets the maximum time in seconds a search request can take before being dropped.
Configures the number of concurrent search requests each CPU core can handle.
-### Allowed IP networks
-
-**Environment variable**: `MEILI_EXPERIMENTAL_ALLOWED_IP_NETWORKS`
-**CLI option**: `--experimental-allowed-ip-networks`
-**Default value**: `None`
-**Expected value**: comma-separated list of CIDR ranges
-
-Override the default IP policy. Restricts access to Meilisearch to the specified IP networks.
-
### Search personalization
**Environment variable**: `MEILI_EXPERIMENTAL_PERSONALIZATION_API_KEY`
@@ -513,7 +503,27 @@ You may want to allow requests to private networks to query internal services du
To do so, specify a list of comma-separated CIDR networks (e.g. `192.168.0.0/16,10.0.0.0/8`). You may specify `any` to allow all
requests regardless of target IP (use only in controlled environments, this is not recommended for production).
-### S3 options
+### Remote search timeout
+
+**Environment variable**: `MEILI_EXPERIMENTAL_REMOTE_SEARCH_TIMEOUT_SECONDS`
+**Default value**: `30`
+**Expected value**: a positive integer (seconds)
+
+Sets the maximum time in seconds a remote federated search request can take before timing out. This configuration is only available via environment variable; no CLI flag is available.
+
+### Disable FID-based database cleanup
+
+**Environment variable**: `MEILI_EXPERIMENTAL_DISABLE_FID_BASED_DATABASES_CLEANUP`
+**Default value**: `false`
+**Expected value**: a boolean
+
+Allows you to opt out of the field ID-based database cleanup when upgrading from Meilisearch versions prior to v1.32. Set this to `true` if you experience issues during the upgrade process. This configuration is only available via environment variable; no CLI flag is available.
+
+### S3 options
+
+
+S3 snapshot storage requires the Meilisearch Enterprise Edition. See [Enterprise and Community editions](/resources/self_hosting/enterprise_edition) for details.
+
#### Bucket URL
diff --git a/resources/self_hosting/enterprise_edition.mdx b/resources/self_hosting/enterprise_edition.mdx
index 0299b319fb..208331ebc7 100644
--- a/resources/self_hosting/enterprise_edition.mdx
+++ b/resources/self_hosting/enterprise_edition.mdx
@@ -11,7 +11,7 @@ The Meilisearch Community Edition (CE) is a free version of Meilisearch. It offe
The Enterprise Edition (EE) is a version of Meilisearch with advanced features. It is available under a BUSL license and cannot be freely used in production. EE is the Meilisearch version that powers Meilisearch Cloud.
-The only feature exclusive to the Enterprise Edition is [sharding](/learn/multi_search/implement_sharding).
+The only feature exclusive to the Enterprise Edition is [sharding](/resources/self_hosting/sharding).
## When should you use each edition?
diff --git a/resources/self_hosting/getting_started/install_locally.mdx b/resources/self_hosting/getting_started/install_locally.mdx
index c6547cd2a8..928e59117b 100644
--- a/resources/self_hosting/getting_started/install_locally.mdx
+++ b/resources/self_hosting/getting_started/install_locally.mdx
@@ -76,7 +76,7 @@ docker run -it --rm \
# Use ${pwd} instead of $(pwd) in PowerShell
```
-You can learn more about [using Meilisearch with Docker in our dedicated guide](/guides/docker).
+You can learn more about [using Meilisearch with Docker in our dedicated guide](/resources/self_hosting/getting_started/docker).
@@ -207,7 +207,7 @@ docker run -it --rm \
# Use ${pwd} instead of $(pwd) in PowerShell
```
-Learn more about [using Meilisearch with Docker in our dedicated guide](/guides/docker).
+Learn more about [using Meilisearch with Docker in our dedicated guide](/resources/self_hosting/getting_started/docker).
diff --git a/resources/self_hosting/getting_started/quick_start.mdx b/resources/self_hosting/getting_started/quick_start.mdx
index 99e2214d50..7a0c4be890 100644
--- a/resources/self_hosting/getting_started/quick_start.mdx
+++ b/resources/self_hosting/getting_started/quick_start.mdx
@@ -118,7 +118,7 @@ Use the returned `taskUid` to [check the status](/reference/api/tasks/get-task)
-Most database operations in Meilisearch are [asynchronous](/learn/async/asynchronous_operations). Rather than being processed instantly, **API requests are added to a queue and processed one at a time**.
+Most database operations in Meilisearch are [asynchronous](/capabilities/indexing/tasks_and_batches/async_operations). Rather than being processed instantly, **API requests are added to a queue and processed one at a time**.
If the document addition is successful, the response should look like this:
@@ -189,6 +189,6 @@ By default, Meilisearch only returns the first 20 results for a search query. Yo
You now know how to install Meilisearch, create an index, add documents, check the status of an asynchronous task, and make a search request.
-If you'd like to search through the documents you just added using a clean browser interface rather than the terminal, you can do so with [our built-in search preview](/resources/self_hosting/getting_started/search_preview). You can also [learn how to quickly build a front-end interface](/guides/front_end/front_end_integration) of your own.
+If you'd like to search through the documents you just added using a clean browser interface rather than the terminal, you can do so with [our built-in search preview](/resources/self_hosting/getting_started/search_preview). You can also [learn how to quickly build a front-end interface](/getting_started/instant_meilisearch/javascript) of your own.
For a more advanced approach, consult the [API reference](/reference/api/requests).
diff --git a/resources/self_hosting/getting_started/search_preview.mdx b/resources/self_hosting/getting_started/search_preview.mdx
index afed8783f2..9602fd28e1 100644
--- a/resources/self_hosting/getting_started/search_preview.mdx
+++ b/resources/self_hosting/getting_started/search_preview.mdx
@@ -30,7 +30,7 @@ Then use the main input to perform plain keyword searches:
-When debugging relevancy, you may want to activate the "Ranking score" option. This displays the overall [ranking score](/learn/relevancy/ranking_score) for each result, together with the score for each individual ranking rule:
+When debugging relevancy, you may want to activate the "Ranking score" option. This displays the overall [ranking score](/capabilities/full_text_search/relevancy/ranking_score) for each result, together with the score for each individual ranking rule:
@@ -38,13 +38,13 @@ When debugging relevancy, you may want to activate the "Ranking score" option. T
## Configuring search options
-Use the menu on the left-hand side to configure [sorting](/learn/filtering_and_sorting/sort_search_results) and [filtering](/learn/filtering_and_sorting/filter_search_results). These require you to first edit your index's sortable and filterable attributes. You may additionally configure any filterable attributes as facets. In this example, "Genres" is one of the configured facets:
+Use the menu on the left-hand side to configure [sorting](/capabilities/filtering_sorting_faceting/how_to/sort_results) and [filtering](/capabilities/filtering_sorting_faceting/getting_started). These require you to first edit your index's sortable and filterable attributes. You may additionally configure any filterable attributes as facets. In this example, "Genres" is one of the configured facets:
-You can also perform [AI-powered searches](/learn/ai_powered_search/getting_started_with_ai_search) if this functionality has been enabled for your project.
+You can also perform [AI-powered searches](/capabilities/hybrid_search/getting_started) if this functionality has been enabled for your project.
Clicking on "Advanced parameters" gives you access to further customization options, including setting which document fields Meilisearch returns and explicitly declaring the search language:
diff --git a/resources/self_hosting/performance/ram_multithreading.mdx b/resources/self_hosting/performance/ram_multithreading.mdx
index 870fe3a873..19bf5b1466 100644
--- a/resources/self_hosting/performance/ram_multithreading.mdx
+++ b/resources/self_hosting/performance/ram_multithreading.mdx
@@ -34,8 +34,21 @@ Multi-threading is unfortunately not possible in machines with only one processo
In some cases, the OS will interrupt Meilisearch and stop all its processes. Most of these crashes happen during indexing and are a result of a machine running out of RAM. This means your computer does not have enough memory to process your dataset.
-Meilisearch is aware of this issue and actively trying to resolve it. If you are struggling with memory-related crashes, consider:
+### Diagnosing memory issues
-- Adding new documents in smaller batches
+Before making changes, identify the root cause:
+
+- **Check your `--max-indexing-memory` setting**: If you have manually configured [`--max-indexing-memory`](/resources/self_hosting/configuration/reference#max-indexing-memory) to a value close to or exceeding your machine's total available RAM, Meilisearch may consume too much memory during indexing. Try lowering this value to leave room for the OS and other processes.
+- **Monitor RSS usage**: Use tools such as `top`, `htop`, or `ps` to monitor the Resident Set Size (RSS) of the Meilisearch process during indexing. If RSS approaches the machine's total available memory, the OS may kill the process via the OOM (Out Of Memory) killer.
+- **Evaluate dataset size relative to available RAM**: As a general guideline, your machine should have enough RAM to hold the full dataset in memory during indexing. If your dataset is significantly larger than available RAM, memory crashes become more likely.
+- **Check system logs**: On Linux, inspect `dmesg` or `/var/log/syslog` for OOM killer messages. These logs confirm whether the OS terminated Meilisearch due to memory pressure.
+
+### Mitigating memory crashes
+
+If you are struggling with memory-related crashes, consider:
+
+- Adding new documents in smaller batches to reduce peak memory consumption during indexing
+- Lowering the [`--max-indexing-memory`](/resources/self_hosting/configuration/reference#max-indexing-memory) value so Meilisearch reserves less memory for indexing
- Increasing your machine's RAM
-- [Following indexing best practices](/learn/indexing/indexing_best_practices)
+- Reducing the number of searchable, filterable, and sortable attributes in your index settings, as each adds to indexing memory requirements
+- [Following indexing best practices](/capabilities/indexing/advanced/indexing_best_practices)
diff --git a/resources/self_hosting/security/basic_security.mdx b/resources/self_hosting/security/basic_security.mdx
index 594bb95790..ca4a001df4 100644
--- a/resources/self_hosting/security/basic_security.mdx
+++ b/resources/self_hosting/security/basic_security.mdx
@@ -200,7 +200,7 @@ Do not expose admin API keys on a public frontend.
### Chat API key
-The `Default Chat API Key` is designed for frontend usage with [conversational search](/learn/chat/getting_started_with_chat). It has access to both `search` and `chatCompletions` actions, allowing users to both perform searches and interact with the chat completions feature.
+The `Default Chat API Key` is designed for frontend usage with [conversational search](/capabilities/conversational_search/getting_started/setup). It has access to both `search` and `chatCompletions` actions, allowing users to both perform searches and interact with the chat completions feature.
## Conclusion
diff --git a/resources/self_hosting/security/master_api_keys.mdx b/resources/self_hosting/security/master_api_keys.mdx
index 944e76de83..8f8669c9a0 100644
--- a/resources/self_hosting/security/master_api_keys.mdx
+++ b/resources/self_hosting/security/master_api_keys.mdx
@@ -73,7 +73,7 @@ In most cases, these default keys are sufficient:
- Use the **Default Search API Key** for client-side search
- Use the **Default Admin API Key** for server-side operations (do not expose on a public frontend)
- Use the **Default Read-Only Admin API Key** for read-only access to all indexes, documents, and settings (do not expose on a public frontend)
-- Use the **Default Chat API Key** for [conversational search](/learn/chat/getting_started_with_chat) (can be safely used from the frontend)
+- Use the **Default Chat API Key** for [conversational search](/capabilities/conversational_search/getting_started/setup) (can be safely used from the frontend)
### Creating custom API keys
diff --git a/resources/self_hosting/security/overview.mdx b/resources/self_hosting/security/overview.mdx
index a2a1bed4ab..b16df6ae36 100644
--- a/resources/self_hosting/security/overview.mdx
+++ b/resources/self_hosting/security/overview.mdx
@@ -31,7 +31,7 @@ For production self-hosted instances:
- [ ] Set the [environment to `production`](/resources/self_hosting/configuration/reference#environment)
- [ ] Use HTTPS via a [reverse proxy](/resources/self_hosting/deployment/running_production) or [direct SSL](/resources/self_hosting/security/http2_ssl)
- [ ] Use the **search API key** (not the admin key) in front-end applications
-- [ ] Consider [tenant tokens](/learn/security/tenant_tokens) for multi-tenant search
+- [ ] Consider [tenant tokens](/capabilities/security/overview) for multi-tenant search
- [ ] Restrict network access with firewall rules
## Next steps
diff --git a/resources/self_hosting/sharding/configure_replication.mdx b/resources/self_hosting/sharding/configure_replication.mdx
new file mode 100644
index 0000000000..c634419a66
--- /dev/null
+++ b/resources/self_hosting/sharding/configure_replication.mdx
@@ -0,0 +1,199 @@
+---
+title: Configure replication for high availability
+sidebarTitle: Configure replication
+description: Set up replicated shards across multiple Meilisearch instances to ensure high availability and distribute search load.
+---
+
+Replication assigns the same shard to multiple remotes in your Meilisearch network. If one remote goes down, another remote holding the same shard continues serving results. This guide covers how to configure replication, common patterns, and what to expect during failover.
+
+
+Replication requires the Meilisearch Enterprise Edition v1.37 or later and a [configured network](/resources/self_hosting/sharding/setup_sharded_cluster).
+
+
+## How replication works
+
+When you configure shards, each shard can be assigned to one or more remotes. If a shard is assigned to multiple remotes, Meilisearch replicates the data to each of them. During a search with `useNetwork: true`, Meilisearch queries each shard exactly once, picking one of the available remotes for each shard. This avoids duplicate results and provides automatic failover.
+
+## Assign shards to multiple remotes
+
+To replicate a shard, list multiple remotes in its configuration:
+
+
+
+```bash
+curl \
+ -X PATCH 'MEILISEARCH_URL/network' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "shards": {
+ "shard-a": { "remotes": ["ms-00", "ms-01"] },
+ "shard-b": { "remotes": ["ms-01", "ms-02"] },
+ "shard-c": { "remotes": ["ms-02", "ms-00"] }
+ }
+ }'
+```
+
+
+
+In this configuration, every shard exists on two remotes. If any single instance goes down, all shards remain available.
+
+## Common replication patterns
+
+### Full replication (every shard on every remote)
+
+Best for small datasets where you want maximum availability and read throughput:
+
+```json
+{
+ "shards": {
+ "shard-a": { "remotes": ["ms-00", "ms-01", "ms-02"] }
+ }
+}
+```
+
+All three remotes hold the same data. This is effectively a read-replica setup: you get 3x the search capacity, and any two instances can go down without affecting availability.
+
+### N+1 replication
+
+Each shard on two remotes, spread across the cluster:
+
+```json
+{
+ "shards": {
+ "shard-a": { "remotes": ["ms-00", "ms-01"] },
+ "shard-b": { "remotes": ["ms-01", "ms-02"] },
+ "shard-c": { "remotes": ["ms-02", "ms-00"] }
+ }
+}
+```
+
+This is the recommended pattern for most use cases. It balances data redundancy, search throughput, and storage efficiency. Each instance holds 2 shards, and losing any single instance still leaves all shards available.
+
+### Geographic replication
+
+Place replicas in different regions to reduce latency for geographically distributed users:
+
+```json
+{
+ "shards": {
+ "shard-a": { "remotes": ["us-east-01", "eu-west-01"] },
+ "shard-b": { "remotes": ["us-east-02", "eu-west-02"] }
+ }
+}
+```
+
+Route search requests to the closest cluster. Both regions hold all data, so either can serve a full result set.
+
+## Failover behavior
+
+When a remote becomes unavailable during a network search:
+
+1. Meilisearch detects the remote is unreachable
+2. If another remote holds the same shard, Meilisearch queries that remote instead
+3. The search completes with results from all shards, using the available replicas
+4. If no remote for a given shard is reachable, results from that shard are missing from the response
+
+Meilisearch does not require manual intervention for failover. When the failed remote comes back online, it automatically rejoins the network and starts serving searches again.
+
+## Scaling read throughput
+
+Replication is the primary way to scale search throughput in Meilisearch. Each replica can independently handle search requests, so adding more replicas increases the total number of concurrent searches your cluster can handle.
+
+To add a new replica for an existing shard:
+
+1. Add the new remote to the network:
+
+
+
+```bash
+curl \
+ -X PATCH 'MEILISEARCH_URL/network' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "addRemotes": {
+ "ms-03": {
+ "url": "http://ms-03.example.com:7703",
+ "searchApiKey": "SEARCH_KEY_03"
+ }
+ }
+ }'
+```
+
+
+
+2. Update the shard assignment to include the new remote:
+
+
+
+```bash
+curl \
+ -X PATCH 'MEILISEARCH_URL/network' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "shards": {
+ "shard-a": { "remotes": ["ms-00", "ms-01", "ms-03"] },
+ "shard-b": { "remotes": ["ms-01", "ms-02"] },
+ "shard-c": { "remotes": ["ms-02", "ms-00"] }
+ }
+ }'
+```
+
+
+
+## The leader instance
+
+The leader is responsible for all write operations (document additions, settings changes, index management). Non-leader instances reject writes with a `not_a_leader` error.
+
+If the leader goes down:
+
+- **Search continues**: replicas still serve search results for all replicated shards
+- **Writes are blocked**: no documents can be added or updated until a leader is available
+- **Manual promotion**: you must designate a new leader by updating the network topology with `PATCH /network` and setting `"leader"` to another instance
+
+
+There is no automatic leader election. If your leader goes down, you must manually promote a new one. Plan for this in your deployment strategy.
+
+
+## Monitoring replica health
+
+Check the current network topology to see which remotes are configured:
+
+
+
+```bash
+curl \
+ -X GET 'MEILISEARCH_URL/network' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY'
+```
+
+
+
+To verify a specific remote is responding, query it directly or use the health endpoint:
+
+
+
+```bash
+curl 'http://ms-01.example.com:7701/health'
+```
+
+
+
+## Next steps
+
+
+
+ Start from scratch with a full cluster setup guide.
+
+
+ Add and remove remotes, update shard assignments.
+
+
+ Understand the concepts and feature compatibility.
+
+
+ Configure snapshots and dumps for your cluster.
+
+
diff --git a/resources/self_hosting/sharding/manage_network.mdx b/resources/self_hosting/sharding/manage_network.mdx
new file mode 100644
index 0000000000..169ddeb42b
--- /dev/null
+++ b/resources/self_hosting/sharding/manage_network.mdx
@@ -0,0 +1,129 @@
+---
+title: Manage the network
+sidebarTitle: Manage the network
+description: Add and remove remotes, update shard assignments, and manage your Meilisearch network topology dynamically.
+---
+
+Once your [sharded cluster is set up](/resources/self_hosting/sharding/setup_sharded_cluster), you can modify the topology without restarting instances. All topology changes go through `PATCH /network` on the leader instance.
+
+## Add a remote
+
+Use `addRemotes` to add a new instance to the network without rewriting the entire `remotes` configuration:
+
+
+
+```bash
+curl \
+ -X PATCH 'MEILISEARCH_URL/network' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "addRemotes": {
+ "ms-03": {
+ "url": "http://ms-03.example.com:7703",
+ "searchApiKey": "SEARCH_KEY_03"
+ }
+ }
+ }'
+```
+
+
+
+After adding the remote, update your shard configuration to assign shards to it.
+
+## Remove a remote
+
+Use `removeRemotes` to take an instance out of the network:
+
+
+
+```bash
+curl \
+ -X PATCH 'MEILISEARCH_URL/network' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "removeRemotes": ["ms-03"]
+ }'
+```
+
+
+
+
+Before removing a remote, make sure its shards are replicated on other remotes. Removing the only remote holding a shard makes that data unavailable for network searches.
+
+
+## Update shard assignments
+
+Reassign shards to different remotes by sending a new `shards` configuration:
+
+
+
+```bash
+curl \
+ -X PATCH 'MEILISEARCH_URL/network' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "shards": {
+ "shard-a": { "remotes": ["ms-00", "ms-01", "ms-03"] },
+ "shard-b": { "remotes": ["ms-01", "ms-02"] },
+ "shard-c": { "remotes": ["ms-02", "ms-03"] }
+ }
+ }'
+```
+
+
+
+## Filter searches by shard
+
+Target specific shards using the `_shard` filter in search requests:
+
+
+
+```bash
+curl \
+ -X POST 'MEILISEARCH_URL/indexes/movies/search' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "q": "batman",
+ "useNetwork": true,
+ "filter": "_shard = \"shard-a\""
+ }'
+```
+
+
+
+Supported `_shard` filter operators:
+
+| Syntax | Behavior |
+|--------|----------|
+| `_shard = "shard-a"` | Results from `shard-a` only |
+| `_shard != "shard-a"` | Results from all shards except `shard-a` |
+| `_shard IN ["shard-a", "shard-b"]` | Results from both `shard-a` and `shard-b` |
+
+## Private network security
+
+By default, Meilisearch blocks requests to non-global IP addresses. If your instances communicate over a private network, configure the `--experimental-allowed-ip-networks` flag on each instance:
+
+
+
+```bash
+meilisearch --experimental-allowed-ip-networks 10.0.0.0/8,192.168.0.0/16
+```
+
+
+
+Only allow the CIDR ranges your instances actually use.
+
+## Next steps
+
+
+
+ Understand the concepts behind sharding, replication, and network search.
+
+
+ Deploy Meilisearch to production on various cloud providers.
+
+
diff --git a/resources/self_hosting/sharding/overview.mdx b/resources/self_hosting/sharding/overview.mdx
new file mode 100644
index 0000000000..66693160fc
--- /dev/null
+++ b/resources/self_hosting/sharding/overview.mdx
@@ -0,0 +1,155 @@
+---
+title: Replication and sharding
+sidebarTitle: Overview
+description: Scale Meilisearch horizontally by distributing documents across multiple instances with sharding, and ensure high availability with replication.
+---
+
+Replication and sharding let you run Meilisearch across multiple instances as a coordinated network. Sharding splits your data across instances so each one handles a smaller portion. Replication duplicates shards across instances so your search stays available if one goes down.
+
+
+Replication and sharding require the Meilisearch Enterprise Edition v1.37 or later. See [Enterprise and Community editions](/resources/self_hosting/enterprise_edition) for details.
+
+
+## What is sharding?
+
+Sharding distributes documents from a single index across multiple Meilisearch instances, called "remotes." Each remote holds one or more named shards containing a subset of your documents.
+
+When a user searches, Meilisearch queries all remotes in the network, collects results from each shard, and merges them into a single ranked response, as if the data lived on one machine.
+
+## What is replication?
+
+Replication assigns the same shard to more than one remote. If one remote becomes unavailable, another remote holding the same shard continues serving results. Meilisearch automatically queries each shard exactly once, avoiding duplicate results even when shards are replicated.
+
+## How it works
+
+```mermaid
+graph TD
+ Client[Client application] -->|search with useNetwork: true| Leader[Leader instance]
+ Leader -->|fan out| R1[Remote ms-00
shard-a, shard-c]
+ Leader -->|fan out| R2[Remote ms-01
shard-a, shard-b]
+ Leader -->|fan out| R3[Remote ms-02
shard-b, shard-c]
+ R1 -->|partial results| Leader
+ R2 -->|partial results| Leader
+ R3 -->|partial results| Leader
+ Leader -->|merged results| Client
+```
+
+1. **Network**: all instances register with each other through the `/network` endpoint, forming a topology with a designated leader
+2. **Shards**: the leader distributes document subsets across remotes based on shard assignments
+3. **Search**: when `useNetwork: true` is set, the leader fans out the search to all remotes, then merges and ranks the combined results
+4. **Failover**: if a remote is down, another remote holding the same shard serves those results
+
+## When to use sharding and replication
+
+| Scenario | Solution |
+|----------|----------|
+| Dataset too large for a single instance | **Sharding**: split documents across multiple remotes |
+| Need high availability | **Replication**: assign each shard to 2+ remotes |
+| Geographic distribution | **Sharding + replication**: place remotes closer to users |
+| Read throughput bottleneck | **Replication**: distribute search load across replicas |
+
+## The network
+
+All instances in a Meilisearch network share a topology configuration that defines:
+
+- **`self`**: the identity of the current instance
+- **`leader`**: the instance coordinating writes and topology changes
+- **`remotes`**: all instances in the network with their URLs and search API keys
+- **`shards`**: how document subsets are distributed across remotes
+
+The leader instance is responsible for write operations. Non-leader instances reject write requests (document additions, settings changes, index creation) with a `not_a_leader` error.
+
+## Searching across the network
+
+To search across all instances, add `useNetwork: true` to your search request:
+
+
+
+```bash
+curl \
+ -X POST 'MEILISEARCH_URL/indexes/movies/search' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "q": "batman",
+ "useNetwork": true
+ }'
+```
+
+
+
+The response includes `_federation` metadata showing which remote each result came from. You can also use the `_shard` filter to target specific shards:
+
+```json
+{
+ "q": "batman",
+ "useNetwork": true,
+ "filter": "_shard = \"shard-a\""
+}
+```
+
+### Network search with multi-search
+
+Network search works with [multi-search](/capabilities/multi_search/getting_started/federated_search) and [federated search](/capabilities/multi_search/getting_started/federated_search). Add `useNetwork: true` to individual queries within a multi-search request:
+
+
+
+```bash
+curl \
+ -X POST 'MEILISEARCH_URL/multi-search' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
+ --data-binary '{
+ "queries": [
+ { "indexUid": "movies", "q": "batman", "useNetwork": true },
+ { "indexUid": "comics", "q": "batman", "useNetwork": true }
+ ]
+ }'
+```
+
+
+
+## Feature compatibility
+
+Most Meilisearch features work transparently across a sharded network. The following table highlights important considerations:
+
+| Feature | Works with sharding? | Notes |
+|---------|---------------------|-------|
+| Full-text search | Yes | Results merged and ranked across all remotes |
+| Filtering and sorting | Yes | Filters applied on each remote before merging |
+| Faceted search | Yes | Facet counts aggregated across remotes |
+| Hybrid/semantic search | Yes | Each remote runs its own vector search, results merged |
+| Geo search | Yes | Geographic filters and sorting work across remotes |
+| Multi-search | Yes | Use `useNetwork: true` per query |
+| Federated search | Yes | Federation merges results from both indexes and remotes |
+| Analytics | Partial | Events are tracked on the instance that receives the search request |
+| Tenant tokens | Yes | Token filters apply on each remote |
+| Document operations | Leader only | Writes must go through the leader instance |
+| Settings changes | Leader only | Settings updates must go through the leader |
+| Conversational search | Yes | Chat queries can use network search |
+
+## Prerequisites
+
+Before setting up sharding and replication, you need:
+
+- Meilisearch Enterprise Edition v1.37 or later on all instances
+- A master key configured on each instance
+- Network connectivity between all instances
+- If using private networks (`10.x.x.x`, `192.168.x.x`), the `--experimental-allowed-ip-networks` flag must be set on each instance
+
+## Next steps
+
+
+
+ Step-by-step guide to configuring sharding and replication.
+
+
+ Set up replicated shards for high availability and read scaling.
+
+
+ Add and remove remotes, update topology, and handle failover.
+
+
+ Learn about the differences between Community and Enterprise editions.
+
+
diff --git a/resources/self_hosting/sharding/setup_sharded_cluster.mdx b/resources/self_hosting/sharding/setup_sharded_cluster.mdx
new file mode 100644
index 0000000000..3fd07a0bcf
--- /dev/null
+++ b/resources/self_hosting/sharding/setup_sharded_cluster.mdx
@@ -0,0 +1,190 @@
+---
+title: Set up a sharded cluster
+sidebarTitle: Set up a sharded cluster
+description: Configure Meilisearch instances into a sharded cluster with replication for horizontal scaling and high availability.
+---
+
+This guide walks you through setting up a Meilisearch cluster with three instances, three shards, and replication for redundancy.
+
+
+Sharding requires the Meilisearch Enterprise Edition v1.37 or later.
+
+
+## Step 1: Start your instances
+
+Start three Meilisearch instances, each with a master key:
+
+
+
+```bash
+# Instance ms-00
+meilisearch --master-key MEILISEARCH_KEY_00 --http-addr 0.0.0.0:7700
+
+# Instance ms-01
+meilisearch --master-key MEILISEARCH_KEY_01 --http-addr 0.0.0.0:7701
+
+# Instance ms-02
+meilisearch --master-key MEILISEARCH_KEY_02 --http-addr 0.0.0.0:7702
+```
+
+
+
+If your instances communicate over a private network, add the `--experimental-allowed-ip-networks` flag:
+
+
+
+```bash
+meilisearch --master-key MEILISEARCH_KEY --experimental-allowed-ip-networks 10.0.0.0/8,192.168.0.0/16
+```
+
+
+
+## Step 2: Enable the network feature
+
+Enable the experimental network feature on each instance:
+
+
+
+```bash
+curl \
+ -X PATCH 'http://ms-00.example.com:7700/experimental-features' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY_00' \
+ --data-binary '{ "network": true }'
+```
+
+
+
+Repeat for `ms-01` and `ms-02` with their respective URLs and master keys.
+
+## Step 3: Configure the network topology
+
+Send a `PATCH /network` request to each instance. The configuration is identical across instances except for the `self` field, which identifies the current instance:
+
+
+
+```bash
+curl \
+ -X PATCH 'http://ms-00.example.com:7700/network' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY_00' \
+ --data-binary '{
+ "leader": "ms-00",
+ "self": "ms-00",
+ "remotes": {
+ "ms-00": {
+ "url": "http://ms-00.example.com:7700",
+ "searchApiKey": "SEARCH_KEY_00"
+ },
+ "ms-01": {
+ "url": "http://ms-01.example.com:7701",
+ "searchApiKey": "SEARCH_KEY_01"
+ },
+ "ms-02": {
+ "url": "http://ms-02.example.com:7702",
+ "searchApiKey": "SEARCH_KEY_02"
+ }
+ }
+ }'
+```
+
+
+
+Send the same request to `ms-01` (with `"self": "ms-01"`) and `ms-02` (with `"self": "ms-02"`).
+
+## Step 4: Configure shards
+
+Define how documents are distributed across remotes. Each shard is assigned to one or more remotes:
+
+
+
+```bash
+curl \
+ -X PATCH 'http://ms-00.example.com:7700/network' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY_00' \
+ --data-binary '{
+ "shards": {
+ "shard-a": { "remotes": ["ms-00", "ms-01"] },
+ "shard-b": { "remotes": ["ms-01", "ms-02"] },
+ "shard-c": { "remotes": ["ms-02", "ms-00"] }
+ }
+ }'
+```
+
+
+
+In this configuration, each shard is replicated across two remotes. If any single instance goes down, all shards remain available through the other instance.
+
+## Step 5: Index documents
+
+Send documents to the leader instance (`ms-00`). The leader distributes them across shards automatically:
+
+
+
+```bash
+curl \
+ -X POST 'http://ms-00.example.com:7700/indexes/movies/documents' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY_00' \
+ --data-binary '[
+ { "id": 1, "title": "Batman Begins" },
+ { "id": 2, "title": "The Dark Knight" },
+ { "id": 3, "title": "Spider-Man" }
+ ]'
+```
+
+
+
+
+All write operations (document additions, updates, deletions, settings changes) must go through the leader instance. Non-leader instances reject writes with a `not_a_leader` error.
+
+
+## Step 6: Search across the cluster
+
+Search with `useNetwork: true` to query all remotes:
+
+
+
+```bash
+curl \
+ -X POST 'http://ms-00.example.com:7700/indexes/movies/search' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer SEARCH_KEY_00' \
+ --data-binary '{
+ "q": "batman",
+ "useNetwork": true
+ }'
+```
+
+
+
+Meilisearch fans out the search to all remotes, collects results from each shard, and returns a single merged response.
+
+## Verify the topology
+
+Check the current network configuration at any time:
+
+
+
+```bash
+curl \
+ -X GET 'http://ms-00.example.com:7700/network' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY_00'
+```
+
+
+
+## Next steps
+
+
+
+ Add and remove remotes dynamically without reconfiguring the entire topology.
+
+
+ Understand the concepts behind sharding, replication, and network search.
+
+
+ Configure snapshots and dumps for your cluster.
+
+
diff --git a/resources/self_hosting/webhooks.mdx b/resources/self_hosting/webhooks.mdx
index 31eca959ce..6fb510c04c 100644
--- a/resources/self_hosting/webhooks.mdx
+++ b/resources/self_hosting/webhooks.mdx
@@ -7,7 +7,7 @@ sidebarDepth: 3
import CodeSamplesAddOrReplaceDocuments1 from '/snippets/generated-code-samples/code_samples_add_or_replace_documents_1.mdx';
-This guide teaches you how to configure a single webhook via instance options to notify a URL when Meilisearch completes a [task](/learn/async/asynchronous_operations).
+This guide teaches you how to configure a single webhook via instance options to notify a URL when Meilisearch completes a [task](/capabilities/indexing/tasks_and_batches/async_operations).
If you are using Meilisearch Cloud or need to configure multiple webhooks, use the [`/webhooks` API route](/reference/api/webhooks) instead.
@@ -22,7 +22,7 @@ If you are using Meilisearch Cloud or need to configure multiple webhooks, use t
## Configure the webhook URL
-🚩 To be able to configure a webhook to notify internal services (such as `localhost`), you will need to [allow requests on private networks](/learn/self_hosted/configure_meilisearch_at_launch#allow-requests-to-private-networks). 🚩
+🚩 To be able to configure a webhook to notify internal services (such as `localhost`), you will need to [allow requests on private networks](/resources/self_hosting/configuration/overview#allow-requests-to-private-networks). 🚩
Restart your Meilisearch instance and provide the webhook URL to `--task-webhook-URL`:
diff --git a/search.js b/search.js
index e4e7f7a0e0..b2e566766a 100644
--- a/search.js
+++ b/search.js
@@ -1,5 +1,5 @@
const MEILISEARCH_HOST = 'https://ms-909f535664f8-173.lon.meilisearch.io'
-const MEILISEARCH_API_KEY = '776dc6a11c118bd1640c3a9ff9679f920bc384238534fc4861fcde0152e7fd68'; // Public search-only API key
+const MEILISEARCH_KEY = '776dc6a11c118bd1640c3a9ff9679f920bc384238534fc4861fcde0152e7fd68'; // Public search-only API key
const MEILISEARCH_INDEX = 'mintlify-production';
function initializeMeilisearchIntegration() {
@@ -220,13 +220,19 @@ function initializeMeilisearchIntegration() {
filterTagsContainer.className = 'meilisearch-filter-tags';
// Create filter tags for each section
- const sections = ['learn', 'guides', 'reference'];
+ const sections = [
+ { key: 'getting_started', label: 'Getting started' },
+ { key: 'capabilities', label: 'Capabilities' },
+ { key: 'reference', label: 'Reference' },
+ { key: 'resources', label: 'Resources' },
+ { key: 'changelog', label: 'Changelog' }
+ ];
const filterTags = {};
- sections.forEach(section => {
+ sections.forEach(({ key: section, label }) => {
const tag = document.createElement('button');
tag.className = 'meilisearch-filter-tag';
- tag.textContent = section;
+ tag.textContent = label;
tag.dataset.section = section;
tag.addEventListener('click', () => {
tag.classList.toggle('active');
@@ -377,7 +383,7 @@ function initializeMeilisearchIntegration() {
try {
const client = new window.meilisearch({
host: MEILISEARCH_HOST,
- apiKey: MEILISEARCH_API_KEY
+ apiKey: MEILISEARCH_KEY
});
const index = client.index(MEILISEARCH_INDEX);
diff --git a/snippets/generated-code-samples/code_samples_chat_completions_1.mdx b/snippets/generated-code-samples/code_samples_chat_completions_1.mdx
index bb22439b0d..572949eff6 100644
--- a/snippets/generated-code-samples/code_samples_chat_completions_1.mdx
+++ b/snippets/generated-code-samples/code_samples_chat_completions_1.mdx
@@ -3,7 +3,7 @@
```bash cURL
curl -N \
-X POST 'MEILISEARCH_URL/chats/WORKSPACE_NAME/chat/completions' \
- -H 'Authorization: Bearer MEILISEARCH_API_KEY' \
+ -H 'Authorization: Bearer MEILISEARCH_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{
"model": "PROVIDER_MODEL_UID",