图像搜索

Meilisearch 支持使用用户提供的嵌入向量进行图像搜索。这使您能够执行多模态搜索:使用文本查询来查找图像。

先决条件

要使用此功能,您需要:

  • 一个包含图像嵌入向量的索引
  • 一个能够将文本查询转换为嵌入向量的模型

快速开始

以下是在 Meilisearch 中设置图像搜索的基本步骤:

  1. 创建索引:定义一个包含图像嵌入向量的索引
{
  "uid": "images",
  "primaryKey": "id"
}
  1. 添加文档:添加包含图像嵌入向量的文档
[
  {
    "id": 1,
    "image": "photo-1.jpg",
    "embedding": [0.1, 0.2, 0.3, ...] // 图像嵌入向量
  }
]
  1. 执行搜索:使用文本查询的嵌入向量进行搜索
{
  "vector": [0.1, 0.15, 0.25, ...], // 文本查询的嵌入向量
  "limit": 10
}

嵌入向量生成

要生成嵌入向量,您可以使用以下工具:

性能优化

对于大型图像数据集,考虑:

  • 使用近似最近邻(ANN)算法
  • 对嵌入向量进行降维
  • 使用专门的向量数据库与 Meilisearch 结合

了解更多

本文向您展示执行多模态搜索的主要步骤,您可以使用文本来搜索没有关联元数据的图像数据库。

前提条件

  • 一个图像数据库
  • 一个 Meilisearch 项目
  • 可以本地安装的嵌入生成服务提供商

配置本地嵌入生成流程

首先,建立一个系统将您的图像发送到所选的嵌入生成服务提供商,然后将返回的嵌入集成到数据集中。

具体流程很大程度上取决于您的特定设置,但应包含以下主要步骤:

  1. 选择一个可以本地运行的提供商
  2. 选择一个同时支持图像和文本输入的模型
  3. 将您的图像发送到嵌入生成服务提供商
  4. 将返回的嵌入添加到数据库中每个图像的 _vector 字段

在大多数情况下,您的系统应定期或在更新数据库时运行这些步骤。

配置用户提供的嵌入器

配置 embedder 索引设置,将其源设置为 userProvided

curl \
  -X PATCH 'MEILISEARCH_URL/indexes/movies/settings' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "embedders": {
      "EMBEDDER_NAME": {
        "source":  "userProvided",
        "dimensions": MODEL_DIMENSIONS
      }
    }
  }'

EMBEDDER_NAME 替换为您希望为嵌入器指定的名称。将 MODEL_DIMENSIONS 替换为所选模型的维度数。

将文档添加到 Meilisearch

接下来,使用 文档端点 上传向量化后的图像。

在大多数情况下,您应该自动化此步骤,以便 Meilisearch 与您的主数据库保持同步。

设置查询向量化处理流程

由于您使用的是 userProvided 嵌入器,因此必须同时为搜索查询生成嵌入向量。该流程应与为图像生成嵌入向量的过程类似:

  1. 从前端接收用户查询
  2. 将查询发送至本地嵌入向量生成服务
  3. 使用返回的查询嵌入向量执行搜索

使用用户提供嵌入向量的向量搜索

获取查询向量后,将其传递至 vector 搜索参数以执行基于语义的 AI 搜索:

curl -X POST -H 'content-type: application/json' \
  'localhost:7700/indexes/products/search' \
  --data-binary '{ 
    "vector": VECTORIZED_QUERY,
    "hybrid": {
      "embedder": "EMBEDDER_NAME",
    }
  }'

VECTORIZED_QUERY 替换为您的服务生成的嵌入向量,EMBEDDER_NAME 替换为您的嵌入器名称。

如果图像包含关联元数据,您可以通过包含原始 q 参数执行混合搜索:

curl -X POST -H 'content-type: application/json' \
  'localhost:7700/indexes/products/search' \
  --data-binary '{ 
    "vector": VECTORIZED_QUERY,
    "hybrid": {
      "embedder": "EMBEDDER_NAME",
    }
    "q": "QUERY",
  }'

总结

您已了解使用 Meilisearch 实现图像搜索的主要步骤:

  1. 准备将图像转换为向量的处理流程
  2. 使用 Meilisearch 索引向量化后的图像
  3. 准备将用户查询转换为向量的处理流程
  4. 使用转换后的查询执行搜索