OLA, Já derubaram Algo Em Produção Hoje?
Hoje EU Vou Falar Sobre Como Importar Documentos Para o Elasticsearch Utilizando A Массовые API Отказ
Para quem Não Conhece Массовая API Обслуживайте Para Encif OU Удамление Документы EM Massa Нет Elasticsearch, Diminuindo Assim Sobrecarga Do Sistema E Melhorando Velocidade de indexação.
AGORA FALANDO SOBRE CASO de Uso, O Meu é Passianamente Indexar Arquivos de Access Logs Que Eu Dieber Da Minha CDN NA EMPRESA EM QUE TRABALHO, Hoije OS Logs VEM Nesse Formato:
{ "version": "v5", "time": "2020-09-30T21:25:04+00:00", "client": "0619h", "configuration": "1570140334", "host": "xxx.xxx.xxx", "request_time": "1.140", "request_method": "GET", "upstream_cache_status": "REVALIDATED", "status": "200", "proxy_status": "-", "upstream_status": "304", "upstream_bytes_received": "298", "scheme": "https", "request_uri": "/xxx", "sent_http_content_type": "image/svg+xml", "server_protocol": "HTTP/2.0", "request_length": "58", "bytes_sent": "1699", "upstream_connect_time": "0.140", "upstream_header_time": "1.139", "upstream_response_time": "1.139", "tcpinfo_rtt": "109355", "remote_addr": "000.000.000.000", "remote_port": "37040", "country": "Brazil", "state": "Rio de Janeiro", "ssl_protocol": "TLSv1.3", "ssl_cipher": "TLS_AES_256_GCM_SHA384", "http_user_agent": "Mozilla/5.0 (Linux; Android 9; Redmi Note 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36", "http_referrer": "https://xxx.xxx.xxx/xxx.html", "requestPath": "/home1", "requestQuery": "", "headers": "-" } { "version": "v5", "time": "2020-09-30T21:25:04+00:00", "client": "0619h", "configuration": "1570140334", "host": "xxx.xxx.xxx", "request_time": "1.140", "request_method": "GET", "upstream_cache_status": "REVALIDATED", "status": "200", "proxy_status": "-", "upstream_status": "304", "upstream_bytes_received": "298", "scheme": "https", "request_uri": "/files/media/design_e_tecnologia.8e655520.svg", "sent_http_content_type": "image/svg+xml", "server_protocol": "HTTP/2.0", "request_length": "58", "bytes_sent": "1699", "upstream_connect_time": "0.140", "upstream_header_time": "1.139", "upstream_response_time": "1.139", "tcpinfo_rtt": "109355", "remote_addr": "000.000.000.000", "remote_port": "37040", "country": "Brazil", "state": "Rio de Janeiro", "ssl_protocol": "TLSv1.3", "ssl_cipher": "TLS_AES_256_GCM_SHA384", "http_user_agent": "Mozilla/5.0 (Linux; Android 9; Redmi Note 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36", "http_referrer": "https://xxx.xxx.xxx/xxx.html", "requestPath": "/home", "requestQuery": "", "headers": "-" }
Isto é, ém ums Json POR Linha, Тодос О.С. Джонс Estão «Flat» Em Uma Linha Só, Agora Nós Precisamos Crar Um Cabeçalho Para Cada Linha Desse Json, Isto Mesmo, API De Mulk Import Do Elasticsearch Espera Que o Arquivo Siga Este Flattrol:
{ "index" : { "_index" : "NOMEDOINDICE"} { "exemplo1": "arquivojson"...}
OU SEJA, A PAMEIRA LINHA FICA O CABESALHO ИДЕНТИФИКАЦИЯ ЛИНКА ИНВИЗИИ INDICE VOCO QUER COLOCAR ESTE DOCUCEO E Na Linha Seguinte O Документы JSON EM Questão.
PARA Facilitar Minha Vida EU CRIEI UMA Função EM Shell Scrill Que Applea Essa Tag Em Todas As Linhas De Em Arquivo Onde Cada Linha é Em objeto Json:
function insert_tag() { while IFS=$'\n' read -r p || [ -n "$p" ] do printf '{ "index" : { "_index" : "NOMEDOINDICE"}\n' printf '%s\n' "$p" done < "$1" }
Essa Função Comebebe Como Parâmetro O Nome DO ARQUIVO COM OS OBJETOS JSON E JOGA EM Stdout O Arquivo Já Processado E Com Os Cabeçalhos.
$ insert_tag ex.json > ex_comtags.json
APOS INSERIR A «TAG» VAMOS ENVIFAR ISTO PARA o Elasticsearch (ASSINGO que Seu Elasticsearch Esteja Acessível EM Localhost: 9200, Caso Seu Endereço Seja Diferente Altere не скручивается Seguir):
$ curl -s -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/_bulk" --data-binary @ex_comtags.json
DEVEMOS CENTERBER UM JSON de Retorno Indebando SE TEVE SUCESSO OU NãO AO INSERIR O Документ:
{ "index": { "_index": "azion-01102020", "_type": "_doc", "_id": "T_PB5HQBQstMer5wsUf5", "_version": 1, "result": "created", "_shards": { "total": 1, "successful": 1, "failed": 0 }, "_seq_no": 1110061, "_primary_term": 1, "status": 201 } }
Preste atenção no objeto «_shards» E NA Propriedade Успешно (Poderia Ser status Não é Mesmo?) O Valor Dive Ser 1, Caso Esteja Diferente o Retorno Vai Trazer O Motivo Pelo Qual o Seu Documento Não Foi Indexado.
Desta Forma Vovê Consege Escrever Scripts Para Automatizar In Inserção de Documentos SEM Sobrecarregar o Seu Servidor.
Caso Tenham Slectryas Ao Fazer Isso Não Hesitem EM Perguntar Nos Comentários, Vou Contruar Ascrever Bastante Sobre O Elasticsearch Então Caso Tenham Dúvidas Ou Queiram Saber Algo é Só Mandar Suestão.
Até Mais, LeaDro Ferreira
Оригинал: «https://dev.to/lsferreira42/enviando-documentos-via-bulk-api-no-elasticsearch-elc»