Skip to main content
This guide shows how to perform AI-powered searches with user-generated embeddings instead of relying on a third-party tool.

Requirements

  • A Meilisearch project

Configure a custom embedder

Configure the embedder index setting, settings its source to userProvided:
curl \
  -X PATCH 'MEILISEARCH_URL/indexes/INDEX_NAME/settings' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "embedders": {
      "EMBEDDER_NAME": {
        "source": "userProvided",
        "dimensions": MODEL_DIMENSIONS
      }
    }
  }'
Embedders with source: userProvided are incompatible with documentTemplate and documentTemplateMaxBytes.

Add documents to Meilisearch

Next, use the /documents endpoint to upload vectorized documents. Place vector data in your documents’ _vectors field:
curl \
  -X POST 'MEILISEARCH_URL/indexes/INDEX_NAME/documents' \
  -H 'Content-Type: application/json' \
  --data-binary '[
    { "id": 0, "_vectors": { "EMBEDDER_NAME": [0, 0.8, -0.2]}, "text": "frying pan" },
    { "id": 1, "_vectors": { "EMBEDDER_NAME": [1, -0.2, 0]}, "text": "baking dish" }
  ]'

Vector search with user-provided embeddings

When using a custom embedder, you must vectorize both your documents and user queries. Once you have the query’s vector, pass it to the vector search parameter to perform an AI-powered search:
curl -X POST 'MEILISEARCH_URL/indexes/INDEX_NAME/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "vector": [0, 1, 2],
    "hybrid": {
      "embedder": "EMBEDDER_NAME"
    }
  }'
vector must be an array of numbers indicating the search vector. You must generate these yourself when using vector search with user-provided embeddings. vector can be used together with other search parameters, including filter and sort:
curl \
  -X POST 'MEILISEARCH_URL/indexes/INDEX_NAME/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "vector": [0, 1, 2],
    "filter": "price < 10",
    "sort": ["price:asc"],
    "hybrid": {
      "embedder": "EMBEDDER_NAME"
    }
  }'