想要更好地控制您的搜索设置?了解我们的灵活的基础设施定价

回到主页Meilisearch 的标志
返回文章

Meilisearch 1.11

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

2024 年 10 月 29 日阅读时间 4 分钟
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
   }
})

当不带 q 参数传递 vector 时,非零 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 开发者社区:Discord

Meilisearch 1.16

Meilisearch 1.16

Meilisearch 1.16 引入了多模态嵌入和新的 API,用于在实例之间传输数据。

Laurent Cazanove
Laurent Cazanove2025年8月5日
Meilisearch 1.15

Meilisearch 1.15

Meilisearch 1.15 引入了新的拼写容错设置、字符串过滤器比较运算符,并改进了对中文的支持。

Carolina Ferreira
Carolina Ferreira2025年6月10日
Meilisearch 1.14

Meilisearch 1.14

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

Carolina Ferreira
Carolina Ferreira2025年4月14日
© . This site is unofficial and not affiliated with Meilisearch.