Skip to main content
Highlighting wraps matched query terms in HTML tags so your frontend can visually emphasize them. Cropping trims long text fields to show only the relevant portion around matched terms. Both features work through search parameters and return their results in the _formatted object of each hit.

Highlight specific attributes

Use attributesToHighlight to specify which fields should have matched terms wrapped in tags:
curl \
  -X POST 'MEILISEARCH_URL/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "q": "knight",
    "attributesToHighlight": ["title", "overview"]
  }'
Matched terms appear in the _formatted object wrapped in <em> tags:
{
  "_formatted": {
    "title": "The Dark <em>Knight</em>",
    "overview": "When the menace known as the Joker wreaks havoc, the Dark <em>Knight</em> must..."
  }
}

Highlight all attributes

Set attributesToHighlight to ["*"] to highlight matched terms across all displayed attributes:
curl \
  -X POST 'MEILISEARCH_URL/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "q": "knight",
    "attributesToHighlight": ["*"]
  }'

Custom highlight tags

Replace the default <em> tags with any markup using highlightPreTag and highlightPostTag:
curl \
  -X POST 'MEILISEARCH_URL/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "q": "knight",
    "attributesToHighlight": ["title"],
    "highlightPreTag": "<strong class=\"highlight\">",
    "highlightPostTag": "</strong>"
  }'
Result:
{
  "_formatted": {
    "title": "The Dark <strong class=\"highlight\">Knight</strong>"
  }
}

Crop long text fields

Use attributesToCrop to trim long fields and show only the portion around the matched terms:
curl \
  -X POST 'MEILISEARCH_URL/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "q": "battle",
    "attributesToCrop": ["overview"],
    "cropLength": 20
  }'
Result:
{
  "_formatted": {
    "overview": "...the epic battle between good and evil reaches its climax as..."
  }
}

Crop parameters reference

ParameterTypeDefaultDescription
attributesToCropArray of stringsnullAttributes to crop. Use ["*"] for all displayed attributes.
cropLengthInteger10Maximum number of words in the cropped result.
cropMarkerString"..."String inserted at the beginning or end of cropped text.

Per-attribute crop length

Override the global cropLength for specific attributes by appending :length to the attribute name:
curl \
  -X POST 'MEILISEARCH_URL/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "q": "mystery",
    "attributesToCrop": ["overview:40", "tagline:10"]
  }'

Custom crop marker

Replace the default "..." truncation marker:
curl \
  -X POST 'MEILISEARCH_URL/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "q": "mystery",
    "attributesToCrop": ["overview"],
    "cropMarker": " [...]"
  }'

Combine highlighting and cropping

For the best user experience, use both features together to show short, relevant snippets with visually emphasized matches:
curl \
  -X POST 'MEILISEARCH_URL/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "q": "space adventure",
    "attributesToHighlight": ["title", "overview"],
    "attributesToCrop": ["overview"],
    "cropLength": 25,
    "highlightPreTag": "<mark>",
    "highlightPostTag": "</mark>",
    "cropMarker": "..."
  }'
Result:
{
  "_formatted": {
    "title": "<mark>Space</mark> Odyssey",
    "overview": "...embark on a daring <mark>space</mark> <mark>adventure</mark> to save humanity from..."
  }
}
Attributes listed in attributesToCrop are automatically included in the _formatted response. If the same attribute appears in both attributesToCrop and attributesToHighlight, the cropped text will also have matched terms highlighted.
For the full parameter reference, see the search API reference.