返回主页Meilisearch 的标志
返回文章
2024 年 10 月 29 日

Meilisearch 1.11

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

Carolina Ferreira
Carolina FerreiraMeilisearch 开发者布道师@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 日