Eu tenho um pequeno banco de dados no Elasticsearch e, para fins de teste, gostaria de recuperar todos os registros. Estou tentando usar um URL do formulário ...
http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}
Alguém pode me fornecer a URL que você usaria para fazer isso, por favor?
database
elasticsearch
query-string
elasticsearch-dsl
John Livermore
fonte
fonte
Respostas:
Acho lucene sintaxe é suportada por isso:
http://localhost:9200/foo/_search?pretty=true&q=*:*
o tamanho padrão é 10, portanto, você também pode precisar
&size=BIGNUMBER
obter mais de 10 itens. (onde BIGNUMBER é igual a um número que você acredita ser maior que o seu conjunto de dados)MAS, a documentação da elasticsearch sugere para grandes conjuntos de resultados, usando o tipo de pesquisa de varredura.
POR EXEMPLO:
e continue solicitando conforme o link da documentação acima sugere.
EDIT:
scan
descontinuado no 2.1.0.scan
não fornece nenhum benefício em relação a umascroll
solicitação regular classificada por_doc
. link para documentos elásticos (descoberto por @ christophe-roussy)fonte
Observe o parâmetro de tamanho , que aumenta as ocorrências exibidas do padrão (10) para 1000 por fragmento.
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html
fonte
max_result_window
elasticsearch (ES) suporta uma solicitação GET ou POST para obter os dados do índice de cluster ES.
Quando fazemos um GET:
Quando fazemos um POST:
Sugiro usar um plug-in de interface do usuário com elasticsearch http://mobz.github.io/elasticsearch-head/ Isso ajudará você a ter uma melhor noção dos índices que você cria e também a testar seus índices.
fonte
from
+size
não pode ser mais do que aindex.max_result_window
configuração de índice que o padrão é 10000curl -XGET ... -d '{...}'
qual é umun
estilo misto de solicitação oficial. Obrigado por mostrar os formatos GET e POST corretos.A consulta abaixo retornaria o NO_OF_RESULTS que você gostaria que fosse devolvido.
Agora, a questão aqui é que você deseja que todos os registros sejam retornados. Então, naturalmente, antes de escrever uma consulta, você não saberá o valor de NO_OF_RESULTS .
Como sabemos quantos registros existem no seu documento? Basta digitar a consulta abaixo
Isso forneceria um resultado parecido com o abaixo
O total do resultado informa quantos registros estão disponíveis no seu documento. Portanto, é uma boa maneira de saber o valor de NO_OF RESULTS
Pesquise todos os tipos em todos os índices
Pesquise todos os tipos no índice foo
Pesquise todos os tipos nos índices foo1 e foo2
Pesquise todos os tipos em qualquer índice que comece com f
Tipos de pesquisa usuário e tweet em todos os índices
fonte
Esta é a melhor solução que encontrei usando o cliente python
https://gist.github.com/drorata/146ce50807d16fd4a6aa
Usando cliente Java
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html
fonte
elasticsearch_dsl==5.4.0
e funciona semsearch_type = 'scan',
.size=10000
algo entre as 5ª e 7ª iterações. comstatus=127
,main ERROR Null object returned for RollingFile in Appenders
,main ERROR Unable to locate appender "rolling" for logger config "root"
Não faz login/var/log/elasticsearch/elasticsearch.log
scan
helpers` que faz o rolo sob o capô (desde a versão 5.xx no menos)search_type = 'scan'
está obsoleto. Código semelhante funcionará sem isso, embora haja algumas diferenças interessantes que estão bem escondidas na documentação antiga. elastic.co/guide/en/elasticsearch/reference/1.4/… Em particular, ao migrar para não usar search_type = scan, a primeira consulta de 'pesquisa' virá com o primeiro lote de resultados a processar.O Elasticsearch ficará significativo mais lento se você adicionar um número grande como tamanho, um método a ser usado para obter todos os documentos é usar os códigos de digitalização e rolagem.
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
No Elasticsearch v7.2, você faz assim:
Os resultados disso conteriam um _scroll_id que você deve consultar para obter os próximos 100 blocos.
fonte
search_type=scan
agora está obsoleto. Portanto, você deve remover isso, mas o comportamento mudou um pouco. O primeiro lote de dados volta da chamada de pesquisa inicial. O link que você fornece mostra a maneira correta de fazer isso.use
server:9200/_stats
também para obter estatísticas sobre todos os seus aliases. como tamanho e número de elementos por alias, isso é muito útil e fornece informações úteisfonte
Se você deseja extrair muitos milhares de registros, então ... algumas pessoas deram a resposta correta ao usar 'scroll' (Nota: Algumas pessoas também sugeriram o uso de "search_type = scan". Isso foi preterido e foi removido na v5.0. Você não precisa disso)
Comece com uma consulta 'search', mas especificando um parâmetro 'scroll' (aqui estou usando um tempo limite de 1 minuto):
Isso inclui seu primeiro 'lote' de hits. Mas não terminamos aqui. A saída do comando curl acima seria algo como isto:
É importante ter _scroll_id à mão, pois em seguida você deve executar o seguinte comando:
No entanto, passar o scroll_id não é algo projetado para ser feito manualmente. Sua melhor aposta é escrever código para fazê-lo. por exemplo, em java:
Agora LOOP no último comando use SearchResponse para extrair os dados.
fonte
Simples! Você pode usar
size
efrom
parâmetro!então você muda
from
gradualmente até obter todos os dados.fonte
from
+size
não pode ter mais do que o ajuste índice index.max_result_window cujo padrão é 10.000from
e,size
você encontrará o problema de Paginação Profunda. Use a API de rolagem para fazer um despejo de todos os documentos.A melhor maneira de ajustar o tamanho é usar size = number na frente do URL
Nota: o valor máximo que pode ser definido nesse tamanho é 10000. Para qualquer valor acima de dez mil, espera-se que você use a função de rolagem, o que minimizaria as chances de impactos no desempenho.
fonte
Você pode usar a
_count
API para obter o valor dosize
parâmetro:Retorna
{count:X, ...}
. Extraia o valor 'X' e faça a consulta real:fonte
http: // localhost: 9200 / foo / _search / ? size = 1000 e bonita = 1
você precisará especificar o parâmetro de consulta de tamanho, pois o padrão é 10
fonte
Tamanho param aumenta os hits exibidos do padrão (10) para 500.
Mude de passo a passo para obter todos os dados.
fonte
Para Elasticsearch 6.x
Solicitação:
GET /foo/_search?pretty=true
Resposta: em Acessos-> total, forneça a contagem dos documentos
fonte
Se for um pequeno conjunto de dados (por exemplo, 1K registros) , você pode simplesmente especificar
size
:A correspondência de todas as consultas não é necessária, pois está implícita.
Se você possui um conjunto de dados de tamanho médio, como registros de 1 milhão , talvez não tenha memória suficiente para carregá-lo, portanto, é necessário um scroll .
Um pergaminho é como um cursor em um banco de dados. No Elasticsearch, ele lembra de onde você parou e mantém a mesma visualização do índice (ou seja, impede que o pesquisador desapareça com uma atualização , impede a mesclagem de segmentos ).
Em termos de API, você deve adicionar um parâmetro de rolagem à primeira solicitação:
Você recebe a primeira página e um ID de rolagem:
Lembre-se de que o ID da rolagem que você recebe e o tempo limite são válidos para a próxima página . Um erro comum aqui é especificar um tempo limite muito grande (valor de
scroll
), que cobriria o processamento de todo o conjunto de dados (por exemplo, 1 milhão de registros) em vez de uma página (por exemplo, 100 registros).Para obter a próxima página, preencha o último ID de rolagem e um tempo limite que deve durar até buscar a seguinte página:
Se você tiver muito o que exportar (por exemplo, documentos 1B) , precisará paralelizar. Isso pode ser feito via rolagem fatiada . Digamos que você queira exportar em 10 threads. O primeiro thread emitia uma solicitação como esta:
Você recebe de volta a primeira página e um ID de rolagem, exatamente como uma solicitação de rolagem normal. Você o consumiria exatamente como uma rolagem normal, exceto pelo fato de obter 1/10 dos dados.
Outros threads fariam o mesmo, exceto que
id
seriam 1, 2, 3 ...fonte
fonte
Por padrão, o Elasticsearch retorna 10 registros, portanto o tamanho deve ser fornecido explicitamente.
Adicione tamanho com solicitação para obter o número desejado de registros.
http: // {host}: 9200 / {index_name} / _search? pretty = true & size = (número de registros)
Nota: O tamanho máximo da página não pode ser superior à configuração de índice index.max_result_window, cujo padrão é 10.000.
fonte
Do Kibana DevTools, seu:
fonte
Uma solução simples usando o pacote python elasticsearch-dsl :
Consulte também https://elasticsearch-dsl.readthedocs.io/en/latest/api.html#elasticsearch_dsl.Search.scan .
fonte
O resultado máximo retornado pelo elasticSearch é 10000, fornecendo o tamanho
Depois disso, você deve usar a API Scroll para obter o resultado e obter o valor _scroll_id e colocar esse valor em scroll_id
fonte
A documentação oficial fornece a resposta para esta pergunta! você pode encontrá-lo aqui .
Você simplesmente substitui o tamanho (1) pelo número de resultados que deseja ver!
fonte
Para retornar todos os registros de todos os índices, você pode:
curl -XGET http://35.195.120.21:9200/_all/_search?size=50&pretty
Resultado:
fonte
fonte
Nenhum, exceto @Akira Sendoh, respondeu como obter TODOS os documentos. Mas mesmo essa solução trava meu serviço ES 6.3 sem logs. A única coisa que funcionou para mim usando a
elasticsearch-py
biblioteca de baixo nível foi através do auxiliar de verificação que usascroll()
api:No entanto, a maneira mais limpa hoje em dia parece ser através da
elasticsearch-dsl
biblioteca, que oferece chamadas mais abstratas e mais limpas, por exemplo: http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#hitsfonte
Se alguém ainda está procurando todos os dados a serem recuperados do Elasticsearch como eu para alguns casos de uso, aqui está o que eu fiz. Além disso, todos os dados significam, todos os índices e todos os tipos de documentos. Estou usando o Elasticsearch 6.3
Referência do Elasticsearch
fonte
esta é a consulta para realizar o que você deseja (sugiro usar o Kibana, pois ajuda a entender melhor as consultas)
para obter todos os registros, você precisa usar a consulta "match_all".
size é o número de registros que você deseja buscar (tipo de limite). por padrão, o ES retornará apenas 10 registros
de é como pular, pular os 3 primeiros registros.
Se você deseja buscar exatamente todos os registros, use o valor do campo "total" do resultado depois de acessar essa consulta do Kibana e use-o com "tamanho".
fonte
Usando o Elasticsearch 7.5.1
caso você também possa especificar o tamanho da sua matriz com & size = $ {number}
caso você não saiba que você indexa
fonte
O uso do console kibana e my_index como índice para pesquisar o seguinte pode ser contribuído. Solicitando que o índice retorne apenas 4 campos do índice, você também pode adicionar tamanho para indicar quantos documentos você deseja retornar pelo índice. No ES 7.6, você deve usar _source, em vez de filtrar, ele responderá mais rapidamente.
fonte
Você pode usar size = 0, isso retornará todos os exemplos de documentos
fonte