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/movies/settings' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "embedders": {
      "image2text": {
        "source":  "userProvided",
        "dimensions": 3
      }
    }
  }'

Add documents to Meilisearch

Next, use the /documents endpoint to upload vectorized documents. Place vector data in your documents’ _vectors field:

curl -X POST -H 'content-type: application/json' \
'localhost:7700/indexes/products/documents' \
--data-binary '[
    { "id": 0, "_vectors": {"image2text": [0, 0.8, -0.2]}, "text": "frying pan" },
    { "id": 1, "_vectors": {"image2text": [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 -H 'content-type: application/json' \
  'localhost:7700/indexes/products/search' \
  --data-binary '{ "vector": [0, 1, 2] }'

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 -H 'content-type: application/json' \
  'localhost:7700/indexes/products/search' \
  --data-binary '{
    "vector": [0, 1, 2],
    "filter": "price < 10",
    "sort": ["price:asc"]
  }'