Este artigo discutirá sobre como usar a API multi-get do Elasticsearch para buscar vários documentos JSON com base em seus IDs. Além disso, o Elasticsearch permite que você use uma única consulta get para recuperar os documentos dos índices usando apenas os IDs dos documentos.
Vamos explorar.
Sintaxe da solicitação
Veja a seguir a sintaxe da API multi-get do Elasticsearch:
GET /_mget
GET /
A API multi-get suporta vários índices, o que permite buscar os documentos mesmo que não estejam no mesmo índice.
A solicitação é compatível com os seguintes parâmetros de caminho:
- <índice> – O nome do índice do qual recuperar os documentos conforme especificado por seus IDs.
Você também pode especificar os outros parâmetros de consulta conforme mostrado:
- Preferência – Define o nó ou fragmento preferido.
- Tempo real – Se definido como verdadeiro, a operação é executada em tempo real.
- Atualizar – Força a operação a atualizar os estilhaços de destino antes de buscar os documentos especificados.
- Roteamento – Um valor que é usado para rotear as operações para um estilhaço específico.
- Store_fields – Recupera os campos do documento armazenados em um índice em vez do documento.
- _fonte – Um valor booleano que define se a solicitação deve retornar o campo _source ou não.
A consulta requer o corpo, que inclui os seguintes valores:
- Documentos – Especifica os documentos que você deseja buscar. Além disso, esta seção oferece suporte aos seguintes atributos:
- _Eu iria – ID exclusivo do documento de destino.
- _índice – O índice que contém o documento de destino.
- Roteamento – A chave para o fragmento principal do documento.
- _fonte – Se verdadeiro, inclui todos os campos de origem; caso contrário, ele os exclui.
- _stored_fields – Os campos armazenados que você deseja incluir.
- Códigos – Os ids dos documentos que você deseja buscar.
Exemplo 1: buscar vários documentos do mesmo índice
O exemplo a seguir mostra como usar a API multi-get do Elasticsearch para recuperar os documentos com IDs específicos do índice Netflix:
curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: relatórios' -H 'Tipo de conteúdo: aplicativo/json' -d'{
'documentos': [
{
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_id': 'W3wnVoMBck2AEzXPytlJ'
}
]
}'
A solicitação fornecida deve buscar os documentos com os IDs especificados no índice Netflix. A saída resultante é como mostrado:
{'documentos': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_versão 1,
'_seq_no': 0,
'_termo_primário': 1,
'encontrado': verdadeiro,
'_fonte': {
'duração': '90 minutos',
'listed_in': 'Documentários',
'país': 'Estados Unidos',
'date_added': '25 de setembro de 2021',
'show_id': 's1',
'diretor': 'Kirsten Johnson',
'lançamento_ano': 2020,
'classificação': 'PG-13',
'description': 'À medida que seu pai se aproxima do fim de sua vida, o cineasta Kirsten Johnson encena sua morte de maneiras inventivas e cômicas para ajudá-los a enfrentar o inevitável.',
'tipo': 'Filme',
'title': 'Dick Johnson Está Morto'
}
},
{
'_index': 'netflix',
'_id': 'W3wnVoMBck2AEzXPytlJ',
'_versão 1,
'_seq_no': 12,
'_termo_primário': 1,
'encontrado': verdadeiro,
'_fonte': {
'país': 'Alemanha, República Tcheca',
'show_id': 's13',
'diretor': 'Christian Schwochow',
'lançamento_ano': 2021,
'classificação': 'TV-MA',
'description': 'Depois que a maioria de sua família é assassinada em um atentado terrorista, uma jovem é inconscientemente atraída para se juntar ao mesmo grupo que os matou.',
'tipo': 'Filme',
'title': 'Eu sou Karl',
'duração': '127 minutos',
'listed_in': 'Dramas, Filmes Internacionais',
'elenco': 'Luna Wedler, Jannis Niewöhner, Milan Peschel, Edin Hasanović, Anna Fialová, Marlon Boess, Victor Boccard, Fleur Geffrier, Aziz Dyab, Mélanie Fouché, Elizaveta Maximová',
'date_added': '23 de setembro de 2021'
}
}
]
}
Também podemos simplificar a solicitação colocando os IDs dos documentos em uma matriz simples, conforme mostrado a seguir:
curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: relatórios' -H 'Tipo de conteúdo: aplicativo/json' -d'{
'ids': ['T3wnVoMBck2AEzXPytlJ', 'W3wnVoMBck2AEzXPytlJ']
}'
A solicitação anterior deve executar uma ação semelhante.
Exemplo 2: buscar os documentos de vários índices
No exemplo a seguir, a solicitação busca vários documentos de diferentes índices, conforme mostrado:
curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: relatórios' -H 'Tipo de conteúdo: aplicativo/json' -d'{
'documentos': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_index': 'disney',
'_id': '8j4wWoMB1yF5VqfaKCE4'
}
]
}'
A saída resultante é como mostrado:
Exemplo 3: excluir campos específicos
Podemos excluir campos específicos de uma determinada solicitação usando os parâmetros source_include e source_exclude.
Um exemplo é como mostrado:
curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: relatórios' -H 'Tipo de conteúdo: aplicativo/json' -d'{
'documentos': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_source': falso
},
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_fonte': {
'include': [ 'listed_in', 'release_year', 'title' ],
'exclude': [ 'descrição', 'tipo', 'data_adicionada' ]
}
}
]
}'
A solicitação fornecida usa a inclusão e a exclusão de origem para especificar quais campos você deseja recuperar em um determinado documento.
A saída resultante é como mostrado:
Conclusão
Nesta postagem, discutimos os fundamentos do trabalho com a API multi-get do Elasticsearch, que permite buscar vários documentos de várias fontes com base em seus IDs. Sinta-se à vontade para explorar os outros documentos para obter mais informações.
Boa codificação!