AI-powered hybrid search is in closed beta. Join the waitlist for early access!

Go to homeMeilisearch's logo
Back to articles
29 Oct 2024

Meilisearch 1.11

Meilisearch 1.11 advances AI-powered search toward stabilization with key improvements, including binary quantization. This release also enhances federated search functionality based on user feedback.

Carolina Ferreira
Carolina FerreiraDeveloper Advocate @ Meilisearch@CarolainFG
Meilisearch 1.11

We're excited to introduce Meilisearch v1.11. In this article, we'll cover the most significant changes. For a full list of updates, visit the changelog on GitHub.

Meilisearch 1.11 is available on Meilisearch Cloud, too—upgrade now!

Experimental: vector database indexing performance improvements

Meilisearch v1.11 introduces a new embedder option: binaryQuantized.

Binary quantization compresses vectors by encoding each dimension with 1-bit values, significantly boosting performance, especially in datasets with over 1M documents and models with more than 1024 dimensions.

Smaller embeddings (under 1024 dimensions) tend to give worse results. With fewer dimensions, the binary vector doesn't retain enough information for good relevancy.

Enabling this feature permanently updates all vectors to contain only 1s and -1s, which can greatly affect search relevancy. This change is irreversible.

Before enabling this feature, we recommend testing it in a smaller or duplicate index in a development environment to evaluate its impact on your use case.

Experimental: AI-powered search improvements

Breaking changes

This release introduces several breaking changes for feature stabilization.

embedder parameter becomes mandatory

In previous versions, the default embedder was automatically used for search and similar requests when no embedder was specified. Starting with v1.11, it’s now mandatory to specify the embedder parameter when performing:

  • Semantic or hybrid search via GET and POST where the embedder must be included as part of the hybrid object.
  • Similarity search via GET and POST, where the embedder is required as a top-level parameter.
// Semantic and hybrid search
client.index('INDEX_NAME').search(
  query, {
    hybrid: {
      embedder: 'EMBEDDER_NAME' // mandatory as of v1.11
   }
  }
)

// Similarity search
client.index('INDEX_NAME').searchSimilarDocuments({ 
  id: 'TARGET_DOCUMENT_ID',
  embedder: 'EMBEDDER_NAME' // mandatory as of v1.11
})

Additionally, even for full-vector searches (when using vector without q), you must include the hybrid object with the embedder.

client.index('INDEX_NAME').search({
  vector: [0, 1, 2],
  hybrid: {
      embedder: 'EMBEDDER_NAME'// mandatory as of v1.11
   }
})

Non-zero semanticRatio now ignored when passing vector without q

Before Meilisearch v1.11, when performing a search with the vector and hybrid parameters but without q, a placeholder keyword search occurred unless hybrid.semanticRatio was set to 1.0. In v1.11, a semantic search is always performed unless hybrid.semanticRatio is set to 0.0.

Additions and improvements

Default OpenAI model update

The default OpenAI model has been updated from text-embedding-ada-002 to the new text-embedding-3-small. This new model is both more cost-effective and more accurate than the legacy ada model, offering better performance at a lower cost.

New embedder parameter

Meilisearch 1.11's new documentTemplateMaxBytes parameter allows truncating the document's template text when it exceeds the specified byte limit. It is set, by default, to 400 bytes.

This change is backward compatible. Existing embedders will retain the 400-byte default, with no need to recompute embeddings during the upgrade. The new limit will only apply when a document is modified and the template is re-rendered.

Improved document template

Fields in documentTemplate now include the field.is_searchable property. The default document template will filter out both empty fields and fields not in the searchable attributes list. The new default template only applies to embedders created starting with v1.11.

// v1.11 default document template
{% for field in fields %}
  {% if field.is_searchable and not field.value == nil %}
    {{ field.name }}: {{ field.value }}
  {% endif %}
{% endfor %}

// v1.10 default document template
{% for field in fields %}
  {{ field.name }}: {{ field.value }}
{% endfor %}

Federated search improvements: facet distribution and stats

Meilisearch v1.11 introduces two new options for federated searches: facetsByIndex and mergeFacets. These options allow you to request facet distribution and stats for federated search results.

Facet Information by index

To retrieve facet distribution and stats for each individual index, use the facetsByIndex option.

{
  "federation": {
    "facetsByIndex": {
      "movies": ["title", "id"],
      "comics": ["title"]
    }
  },
  "queries": [
    { "q": "Batman", "indexUid": "movies" },
    { "q": "Batman", "indexUid": "comics" }
  ]
}

The response will include facet distribution and stats for each index:

{
  "facetsByIndex": {
    "movies": {
      // Facet distribution for queries on the `movies` index
      "distribution": {
        "title": {
          "Batman returns": 1
        },
        "id": {
          "42": 1
        }
      },
      // Facet stats for queries on the `movies` index
      "stats": {
        "id": {
          "min": 42,
          "max": 42
        }
      }
    },
    "comics": {
      // Facet distribution for queries on the `comics` index
      "distribution": {
        "title": {
          "Batman: the killing joke": 1
        }
      },
      // Facet stats for queries on the `comics` index (empty because only numeric values are considered)
      "stats": {}
    }
  }
}

Merged facet information

To get facet distribution and stats from all indexes in a single result, use both facetsByIndex and mergeFacets:

POST /multi-search
{
  "federation": {
    "facetsByIndex": {
      "movies": ["title", "id"],
      "comics": ["title"]
    },
    "mergeFacets": { "maxValuesPerFacet": 10 }
  },
  "queries": [
    { "q": "Batman", "indexUid": "movies" },
    { "q": "Batman", "indexUid": "comics" }
  ]
}

The response will include merged facet data:

{
  "facetDistribution": {
    "title": {
      "Batman returns": 1,
      "Batman: the killing joke": 1
    },
    "id": {
      "42": 1
    }
  },
  "facetStats": {
    "id": {
      "min": 42,
      "max": 42
    }
  }
}

Experimental: new STARTS_WITH filter operator

The new STARTS_WITH filter operator matches any field values that start with the specified string pattern:

// returns all heroes whose name starts with 'super'
"filter": "hero STARTS_WITH super"

This is an experimental feature. To enable it, use the experimental features endpoint and set the containsFilter option to true. Note that this will also activate the CONTAINS filter operator.

Share your feedback via this GitHub discussion

Contributors shout-out

We want to give a massive thank you to the contributors who made this release possible: @iornstein for their help with Meilisearch, and @luflow, @tkhshtsh0917 for their work on charabia.

We also want to extend special thanks to our SDK maintainers working hard to make Meilisearch available across many languages and frameworks.


And that’s a wrap for v1.11! These release notes only highlights the most significant updates. For an exhaustive listing, read the changelog on Github.

Upgrade with ease using Meilisearch Cloud.

Open Meilisearch Cloud


Stay in the loop of everything Meilisearch by subscribing to our monthly newsletter. To learn more about Meilisearch's future and help shape it, take a look at our roadmap and participate in our Product Discussions.

For anything else, join our developers community on Discord.

Meilisearch 1.10

Meilisearch 1.10

Meilisearch 1.10 introduces federated search and locale settings, and paves the way for AI-powered search stabilization.

Laurent Cazanove
Laurent Cazanove27 Aug 2024
Meilisearch 1.9

Meilisearch 1.9

Meilisearch 1.9 brings similar documents, ranking score threshold, grouping by attribute, and improved AI search.

Laurent Cazanove
Laurent Cazanove02 Jul 2024
Here's what you missed in the latest Meilisearch live event: V1.8, V1.9, new embedders, query suggestions, and more.

Here's what you missed in the latest Meilisearch live event: V1.8, V1.9, new embedders, query suggestions, and more.

On June 11, 2024, Meilisearch hosted a live event packed with product updates, sneak peeks, and roadmap discussions. If you couldn't make it, here's a quick recap of what went down.

Maya Shin
Maya Shin13 Jun 2024