AI 驱动的混合搜索正在进行封闭测试。 加入候补名单 以获取早期访问权限!

返回主页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.12

Meilisearch 1.12

Meilisearch 1.12 带来了显著的索引速度提升,并引入了新的 API 来禁用前缀搜索和分面搜索,并检索任务批次。

Laurent Cazanove
Laurent Cazanove2024年12月23日
Meilisearch Q4 2024 release wrap-up

Meilisearch 2024 年第四季度发布总结

Meilisearch 第四季度版本包括更快的搜索速度、对 UI 中设置的更多控制以及一个新区域。

Maya Shin
Maya Shin2024年11月27日
Meilisearch 1.10

Meilisearch 1.10

Meilisearch 1.10 引入了联合搜索和区域设置,并为人工智能驱动的搜索稳定铺平了道路。

Laurent Cazanove
Laurent Cazanove2024年8月27日