This guide shows how to perform AI-powered searches with user-generated embeddings instead of relying on a third-party tool.
Requirements
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"
}
}'