使用用户提供的嵌入进行图像搜索

    本文介绍了执行多模态搜索的主要步骤,您可以使用文本在没有相关元数据的图像数据库中进行搜索。

    要求

    配置您的本地嵌入生成管道

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

    确切的步骤很大程度上取决于您的具体设置,但应包括以下主要步骤

    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

    接下来,使用 /documents 端点 上传矢量化图像。

    在大多数情况下,您应该自动化此步骤,以使 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. 使用转换后的查询执行搜索