Preparando os Dados
Antes de explorar o recurso de realce, vamos criar um documento de exemplo no índice pessoas:
PUT pessoas/registro/10
{
"nome": "Pedro",
"idade": 34,
"origem": "brasil",
"biografia": "programador dedicado e curioso",
"etiquetas": ["eficiente", "detalhista", "proativo"]
}
Realce Padrão
Por padrão, o Elasticsearch utiliza a tag <em> para destacar os termos encontrados. Para ativar o realce, basta incluir o bloco highlight na consulta e esepcificar quais campos devem ser destacados em fields:
GET pessoas/registro/_search
{
"query": {
"match": {
"nome": "Pedro"
}
},
"highlight": {
"fields": {
"nome": {}
}
}
}
O resultado trará, além dos dados originais em _source, um bloco highlight contendo o campo realçado:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.3862944,
"hits": [
{
"_index": "pessoas",
"_type": "registro",
"_id": "10",
"_score": 1.3862944,
"_source": {
"nome": "Pedro",
"idade": 34,
"origem": "brasil",
"biografia": "programador dedicado e curioso",
"etiquetas": ["eficiente", "detalhista", "proativo"]
},
"highlight": {
"nome": [
"<em>Pedro</em>"
]
}
}
]
}
}
Personalização das Tags de Realce
Caso seja necessário utilizar tags HTML diferentes do padrão, o Elasticsearch permite definir tags personalizadas por meio dos parâmetros pre_tags e post_tags. Esses parâmetros aceitam qualquer marcação HTML, inclusive com atributso e estilos inline:
GET pessoas/registro/_search
{
"query": {
"match": {
"origem": "brasil"
}
},
"highlight": {
"pre_tags": "<span class='destaque' style='background-color:yellow'>",
"post_tags": "</span>",
"fields": {
"origem": {}
}
}
}
Na resposta, o termo encontrado será envolvido pelas tags customizadas:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "pessoas",
"_type": "registro",
"_id": "10",
"_score": 0.2876821,
"_source": {
"nome": "Pedro",
"idade": 34,
"origem": "brasil",
"biografia": "programador dedicado e curioso",
"etiquetas": ["eficiente", "detalhista", "proativo"]
},
"highlight": {
"origem": [
"<span class='destaque' style='background-color:yellow'>brasil</span>"
]
}
}
]
}
}
Atenção: ao definir atributos ou estilos dentro das tags personalizadas, utilize sempre aspas simples. Isso evita conflitos com as aspas duplas utilizadas na sintaxe JSON do Elasticsearch.