Para apagar todos os documentos de um índice, utilize a API _delete_by_query com uma consulta que corresponda a todos os documentos. Por exemplo, para o índice indice_suporte:
curl -X POST "localhost:9200/indice_suporte/_delete_by_query" -H 'Content-Type: application/json' -d'
{
"query": {
"match_all": {}
}
}
'
Para remover um documento específico, use o comando DELETE com o ID do documento:
DELETE /indice_suporte/_doc/abc123xyz789
Criação de Templates de Índice
Templaets permitem definir configurações padrão para novos índices. Abaixo, um exemplo para padrões de índice que comecem com vector_*:
PUT _template/template_suporte
{
"index_patterns": ["vector_*"],
"settings": {
"analysis": {
"analyzer": {
"analisador_pt": {
"type": "ik_smart"
}
}
},
"number_of_shards": 1
},
"mappings": {
"properties": {
"identificador": {
"type": "long"
},
"texto_principal": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"embeddings_texto": {
"type": "dense_vector",
"dims": 768,
"element_type": "float",
"index": true,
"similarity": "cosine",
"index_options": {
"type": "hnsw",
"m": 16,
"ef_construction": 128
}
},
"resposta_conteudo": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"titulo_pergunta": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"parametros_saida": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"categoria": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
}
Uso de must vs should em Consultas Booleanas
Em consultas booleanas, must exige que todos os subcritérios sejam satisfeitos, enquanto should permite que apenas um ou mais critérios sejam atendidos. A escolha depende dos requisitos de precisão.
- Com
must: Ideal para correspondência estrita, onde o documento deve atender a todas as condições simultaneamente. - Com
should: Útil para resultados mais abrangentes, aceitando parcial correspondência. Pode impactar o desempenho ao avaliar mais documentos.
Para combinar ambos, defina condições obrigatórias com must e opcionais com should para enriquecer os resultados. Exemplo em Java com a biblioteca Elasticsearch:
BoolQuery consultaHibrida = new BoolQuery.Builder()
.must(consultaPorTexto) // Correspondência textual obrigatória
.should(consultaKNN) // Similaridade vetorial opcional
.minimumShouldMatch(0)
.build();
Exclusão de Dados por Campo Específico
Para deletar documentos com base em um valor de campo, use _delete_by_query com um filtro term. Exemplo para o campo rotulo:
POST /indice_suporte/_delete_by_query
{
"query": {
"term": {
"rotulo.keyword": {
"value": "FAQ_Suporte"
}
}
}
}
Exclusão e Renomeação de Índices
Para excluir um índice, envie uma requisição DELETE:
DELETE /nome_do_indice
O Elasticsearch não suporta renomeação direta. Para simular, crie um novo índice, migre os dados com _reindex e, após confirmação, remova o antigo:
POST _reindex
{
"source": {
"index": "indice_antigo"
},
"dest": {
"index": "indice_novo"
}
}
Execute operações de reindexação em horários de baixo tráfego para minimizar impacto.