Gerenciamento de Índices e Consultas no Elasticsearch

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.

Tags: elasticsearch ik-analyzer knn boolean-queries dense-vector

Publicado em 6-22 01:05