Meilisearch v1.14 发布啦 ✨ 在我们的博客上阅读更多内容

前往首页Meilisearch 的标志
返回文章
2024 年 10 月 29 日

Meilisearch 1.11

Meilisearch 1.11 通过包括二进制量化在内的关键改进,推进了 AI 驱动搜索的稳定性。此版本还根据用户反馈增强了联邦搜索功能。

Carolina Ferreira
Carolina Ferreira开发者倡导者 @ Meilisearch@CarolainFG
Meilisearch 1.11

我们很高兴推出 Meilisearch v1.11。在本文中,我们将介绍最重要的更改。有关更新的完整列表,请访问 GitHub 上的更新日志

Meilisearch 1.11 也可在 Meilisearch Cloud 上使用——立即升级!

实验性功能:向量数据库索引性能改进

Meilisearch v1.11 引入了一个新的嵌入器选项binaryQuantized

二进制量化通过使用 1 位值编码每个维度来压缩向量,从而显着提高性能,尤其是在超过 100 万个文档和模型超过 1024 个维度的数据集中。

较小的嵌入(小于 1024 个维度)往往会产生较差的结果。维度较少时,二进制向量无法保留足够的信息以获得良好的相关性。

启用此功能会永久更新所有向量以仅包含 1 和 -1,这可能会极大地影响搜索相关性。此更改是不可逆的。

在启用此功能之前,我们建议在开发环境中的较小或重复索引中对其进行测试,以评估其对您的用例的影响。

实验性功能:AI 驱动搜索改进

重大更改

此版本引入了多项重大更改以实现功能稳定。

embedder 参数变为强制性

在以前的版本中,当未指定嵌入器时,默认嵌入器会自动用于搜索和类似请求。从 v1.11 开始,现在在执行以下操作时必须指定 embedder 参数

  • 通过 GETPOST 进行语义或混合搜索,其中嵌入器必须包含在 hybrid 对象中。
  • 通过 GETPOST 进行相似性搜索,其中 embedder 是必需的顶级参数。
// 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
})

此外,即使对于全向量搜索(当使用 vector 而不使用 q 时),也必须包含带有 embedderhybrid 对象。

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

当传递不带 qvector 时,现在忽略非零 semanticRatio

在 Meilisearch v1.11 之前,当执行带有 vectorhybrid 参数但不带 q 的搜索时,除非 hybrid.semanticRatio 设置为 1.0,否则会发生占位符关键字搜索。在 v1.11 中,除非 hybrid.semanticRatio 设置为 0.0,否则始终执行语义搜索。

新增功能和改进

默认 OpenAI 模型更新

默认的 OpenAI 模型已从 text-embedding-ada-002 更新为新的 text-embedding-3-small。这个新模型比传统的 ada 模型更具成本效益且更准确,以更低的成本提供更好的性能。

新的嵌入器参数

Meilisearch 1.11 的新 documentTemplateMaxBytes 参数允许在文档的模板文本超过指定的字节限制时将其截断。默认情况下,它设置为 400 字节。

此更改向后兼容。现有嵌入器将保留 400 字节的默认值,升级期间无需重新计算嵌入。新限制仅在修改文档并重新渲染模板时应用。

改进的文档模板

documentTemplate 中的字段现在包含 field.is_searchable 属性。默认文档模板将过滤掉空字段和不在可搜索属性列表中的字段。新的默认模板仅适用于从 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 %}

联邦搜索改进:分面分布和统计信息

Meilisearch v1.11 为联邦搜索引入了两个新选项:facetsByIndexmergeFacets。这些选项允许您为联邦搜索结果请求分面分布统计信息

按索引划分的分面信息

要检索每个索引的分面分布和统计信息,请使用 facetsByIndex 选项

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

响应将包括每个索引的分面分布和统计信息

{
  "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": {}
    }
  }
}

合并的分面信息

要从单个结果中的所有索引获取分面分布和统计信息,请同时使用 facetsByIndexmergeFacets

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

响应将包括合并的分面数据

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

了解有关联邦搜索及其用例的更多信息。

实验性功能:新的 STARTS_WITH 过滤器运算符

新的 STARTS_WITH 过滤器运算符匹配任何以指定字符串模式开头的字段值

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

这是一个实验性功能。要启用它,请使用实验性功能端点,并将 containsFilter 选项设置为 true。请注意,这也将激活 CONTAINS 过滤器运算符。

通过此GitHub 讨论分享您的反馈

贡献者致谢

我们要衷心感谢使此版本成为可能的贡献者:@iornsteinMeilisearch 的帮助,以及 @luflow@tkhshtsh0917charabia 的工作。

我们还要特别感谢我们的 SDK 维护者,他们努力使 Meilisearch 可用于多种语言和框架


这就是 v1.11 的全部内容!这些发行说明仅重点介绍了最重要的更新。有关详尽的列表,请阅读 Github 上的更新日志

使用 Meilisearch Cloud 轻松升级。

打开 Meilisearch Cloud


通过订阅我们的每月新闻通讯,随时了解 Meilisearch 的一切动态。要了解有关 Meilisearch 未来并帮助塑造它的更多信息,请查看我们的路线图并参与我们的产品讨论

如有其他任何问题,请加入我们在 Discord 上的开发者社区。

Meilisearch 1.14

Meilisearch 1.14

Meilisearch 1.14 引入了新的实验性功能,包括复合嵌入器和嵌入缓存,以提高性能。它还添加了核心功能,例如精细的可筛选属性和按 ID 批量文档检索。

Carolina Ferreira
Carolina Ferreira2025 年 4 月 14 日
Meilisearch AI launch week recap

Meilisearch AI 发布周回顾

Meilisearch AI 发布回顾:通过 AI 和个性化改造搜索

Maya Shin
Maya Shin2025 年 3 月 28 日
Introducing Meilisearch's next-generation indexer: 4x faster updates, 30% less storage

介绍 Meilisearch 的下一代索引器:更新速度提高 4 倍,存储空间减少 30%

2024 年索引器版本通过并行处理、优化的 RAM 使用率和增强的可观察性彻底改变了搜索性能。了解我们最新版本中的新功能。

Louis Dureuil
Louis Dureuil2025 年 2 月 26 日