O Elasticsearch permite que você indexe dados de maneira rápida e flexível. Experimente gratuitamente na nuvem ou execute-o localmente para ver como a indexação pode ser fácil.
Neste artigo, discutiremos como exibir os campos de um índice do Elasticsearch. Isso pode ser útil para entender a estrutura dos seus dados, identificar campos específicos e solucionar problemas. Abordaremos os seguintes tópicos:
- Utilizando a API
_mappingpara recuperar informações de campo - Utilizando a API
_searchpara exibir valores de campo - Exibição de subcampos
- _source sintética
- Campos de tempo de execução
1. Utilizando a API _mapping para recuperar informações de campo
A API _mapping permite recuperar a definição de mapeamento para um índice ou vários índices. Isso inclui informações sobre os campos, seus tipos de dados e outras propriedades. Para recuperar o mapeamento de um índice específico, utilize a seguinte solicitação:
Por exemplo, se você tiver um índice chamado my_index, poderá recuperar seu mapeamento com a seguinte solicitação:
A resposta incluirá a definição de mapeamento para o índice, que contém informações sobre os campos e suas propriedades.
Também é possível recuperar o mapeamento de um campo específico. Isso pode ser útil se o seu mapeamento for muito extenso e você quiser se concentrar apenas em um campo específico. Para obter o mapeamento de um campo específico, utilize a seguinte solicitação:
Você também pode recuperar os mapeamentos de vários campos separando seus nomes por vírgulas, como na seguinte solicitação:
2. Usando a API _search para exibir valores de campo
Para exibir os valores dos campos em um índice do Elasticsearch, você pode usar a API _search . A API _search oferece várias maneiras de controlar quais campos são retornados; as duas principais são:
_sourceO campo_sourcecontém o corpo original do documento JSON exatamente como foi indexado, incluindo quaisquer alterações feitas pelos pipelines de ingestão ou etapas de pré-processamento. Para exibir campos específicos do documento de origem, implemente a filtragem de origem, como veremos a seguir.fieldsO parâmetrofieldspermite recuperar campos específicos dos seus documentos ao realizar uma pesquisa, com base no mapeamento do índice. Ao contrário de_source,fieldstambém pode retornar valores de campos armazenados, valores de documentos ou campos de tempo de execução sem fazer referência a_source, embora para campos padrão sem valores de documentos ou configurações armazenadas, ele recorra a_source. Isso pode trazer muitos benefícios, como melhoria de desempenho e outros, como veremos a seguir.
Usando o campo _source
Por padrão, a API _search retorna o campo _source , que contém o documento JSON original que foi indexado. Para exibir campos específicos, você pode adicionar filtros no parâmetro _source da solicitação de pesquisa; isso é chamado de filtragem de origem.
Aqui está um exemplo de uma solicitação de pesquisa que retorna os valores dos campos title e author para documentos no índice my_index :
Neste exemplo, o parâmetro _source especifica os campos a serem retornados.
Se você precisar de ainda mais controle, pode usar as propriedades includes e excludes do objeto _source . Por exemplo, a consulta abaixo retorna o campo de nível superior title e todos os subcampos de author exceto author.description.
Neste exemplo, usamos o padrão author.* para recuperar todos os subcampos diretos do objeto author . Então excluímos explicitamente author.description para que apenas os outros campos de autor sejam retornados. Note que isso não traz nenhuma melhoria de desempenho, já que ainda precisa carregar e analisar o JSON de origem, mas pode reduzir o tamanho da resposta enviada pela rede.
Usando o parâmetro de campos
Você pode usar o parâmetro fields para filtrar os campos retornados na resposta da pesquisa. O uso de fields em vez de _source oferece diversas vantagens, incluindo:
- Desempenho aprimorado:
fieldspode retornar valores diretamente de campos armazenados ou valores de documentos sem ter que carregar o_sourcecompleto, tornando o tamanho da carga útil da resposta menor. - Saída formatada: Para campos padrão,
fieldspode recorrer a_sourcepara obter os valores, mas ele analisa o mapeamento do índice para formatar corretamente a saída, como datas formatadas, tornando-as consistentes com o que é usado para agregações e classificação. - Acesso a campos de tempo de execução:
fieldspode retornar campos de tempo de execução, que não existem no_sourceoriginal. - Você pode encontrar mais benefícios aqui.
Por exemplo, para retornar apenas os campos title e author no índice my_index , você pode usar a seguinte solicitação de pesquisa:
Na consulta acima, definimos o campo _source como falso para não retornarmos o documento de origem. Isso pode minimizar drasticamente o tamanho da carga útil da resposta, mas lembre-se de que isso só funciona porque os campos title e author são do tipo de campo keyword , que têm doc_values habilitado por padrão. Se o campo não tiver doc_values habilitado e _source estiver definido como falso, o Elasticsearch não terá como recuperá-los e eles serão ignorados na resposta.
É importante notar que a resposta fields sempre retorna uma matriz de valores para cada campo, mesmo que haja apenas um único valor. Isso ocorre porque o Elasticsearch não possui um tipo de array dedicado, e qualquer campo pode ter vários valores. Para obter mais informações sobre arrays no Elasticsearch, clique aqui.
Outras formas de recuperar campos
Embora a recuperação de campos usando _source ou fields sejam os métodos recomendados, existem outros métodos disponíveis para casos de uso específicos, como:
Campos de valor do documento: Se você quiser evitar _source completamente, você pode pesquisar usando o parâmetro docvalue_fields . Os valores do documento armazenam os mesmos valores de campo que _source , mas em uma estrutura de dados em disco, otimizada para classificação e agregações.
Como é separado dos valores armazenados com _source, você pode solicitar campos específicos sem carregar todo o _source. Isso é útil se você estiver consultando documentos grandes, mas precisar apenas de alguns campos pequenos que suportem valores do tipo "doc". Outro caso de uso para usar docvalue_fields é quando você deseja usar formatação personalizada nos campos date e numeric , como veremos no exemplo abaixo.
Observe que isso só funciona para campos que você habilita doc_values ou para tipos de campo que o têm habilitado por padrão, como keyword, date, tipos numéricos e boolean, não para text ou annotated_text.
Neste exemplo, usamos o parâmetro docvalue_fields para recuperar os campos title, author e published sem carregar o documento _source completo:
Quando esta consulta é executada, o Elasticsearch obtém os valores diretamente de seu armazenamento colunar em disco, em vez de referenciar o _source para cada documento. O campo published é retornado com o formato epoch_millis em vez do formato padrão, graças ao parâmetro format fornecido na consulta.
Campos armazenados: Se você marcou explicitamente campos específicos como armazenados no mapeamento, você pode usar o parâmetro stored_fields para filtrar esses campos. Isso é útil se você deseja respostas resumidas apenas com esses campos específicos ou para campos que você armazenou deliberadamente para recuperação posterior. É armazenado separadamente de _source, portanto, este método também é útil para evitar a necessidade de carregar _source.
É importante notar que esta opção está desativada por padrão e geralmente não é recomendada. Em vez disso, utilize a filtragem de origem para retornar determinados subconjuntos do documento de origem original.
Na consulta de exemplo abaixo, usamos o parâmetro stored_fields para recuperar o campo summary , que tem a configuração de mapeamento de índice de ”store”: true.
Quando esta consulta é executada, o Elasticsearch verifica se este campo foi marcado com ”store”: true, se não o encontrar, irá ignorar o campo completamente.
3. Exibição de subcampos
Se o seu índice contiver subcampos, você pode usar a notação de ponto para especificar o caminho do campo no parâmetro fields . Note que os subcampos são diferentes do tipo de campo aninhado. Por exemplo, se você tiver um subcampo chamado address.city, poderá incluí-lo na resposta da pesquisa desta forma:
Neste exemplo, a resposta da pesquisa incluirá os valores dos campos title, author e address.city .
4. Fonte sintética
Se você quiser manter a funcionalidade de usar _source , mas também economizar espaço em disco, você tem a opção de usar _source sintético em seu mapeamento de índice. _source sintético é um recurso que permite ao Elasticsearch reconstruir o _source a partir de dados existentes, como campos armazenados e valores de documentos, mesmo quando _source está desativado. Isso permite economizar bastante espaço de armazenamento, ao custo de velocidades ligeiramente menores no momento da consulta, já que a reconstrução ocorre em tempo real. Ative este recurso usando os valores abaixo nas configurações do seu índice:
Algumas vantagens de usar _source sintético incluem: exibição do documento completo ao usar a API _search , filtragem de origem e compatibilidade com outros recursos e ferramentas como o Kibana que esperam que _source esteja disponível, tudo isso evitando a necessidade de armazenar o documento _source completo.
5. Campos de tempo de execução
Os campos de tempo de execução permitem definir campos com script no momento da consulta ou no mapeamento do índice, dentro de um bloco de tempo de execução. Esses campos nunca são indexados, portanto, adicionar um campo de tempo de execução não aumenta o tamanho do índice, mas nunca aparecerá em _source. Os campos de tempo de execução definidos no mapeamento são persistentes e estão disponíveis para todas as consultas, enquanto os campos de tempo de execução definidos no momento da consulta são temporários e estão disponíveis apenas nessa solicitação de pesquisa.
A principal vantagem de usar campos em tempo de execução é a capacidade de adicionar campos aos documentos depois de já os ter importado, simplificando as decisões de mapeamento. Os campos de tempo de execução também são ótimos para enriquecer seus documentos com valores que não existem no documento original, mas são gerados por meio de um script, como formatar uma string ou calcular uma pontuação.
Vale ressaltar também que os campos de tempo de execução podem prejudicar o desempenho, pois será necessário executar um script para cada documento no conjunto de resultados. Para recuperar um campo de tempo de execução, você também pode usar o parâmetro fields na API _search .
Conclusão
A exibição de campos de um índice Elasticsearch pode variar desde a simples recuperação de valores usando o mapeamento de índice ou o _source, até métodos mais avançados usando fields, docvalue_fields ou campos de tempo de execução para maior controle e eficiência. Compreender as vantagens e desvantagens de diferentes métodos é fundamental para otimizar suas experiências de busca. Seja para otimizar payloads, enriquecer documentos ou usar dados sintéticos _source para economizar armazenamento, o Elasticsearch oferece diversas ferramentas e recursos para encontrar os dados que você precisa, da maneira que você precisa. Essas técnicas podem ajudá-lo a entender a estrutura de seus dados, identificar campos específicos e solucionar problemas.




