[Database] Запрос Elasticsearch для возврата всех записей


Answers

http://127.0.0.1:9200/foo/_search/?size=1000&pretty=1
                                   ^

Обратите внимание на параметр размера , который увеличивает количество показов, отображаемых по умолчанию (10), до 1000 на каждый осколок.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html

Question

У меня есть небольшая база данных в Elasticsearch, и для целей тестирования хотелось бы вернуть все записи. Я пытаюсь использовать URL-адрес формы ...

http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}

Может кто-нибудь даст мне URL-адрес, который вы использовали бы для этого, пожалуйста?




curl -XGET '{{IP/localhost}}:9200/{{Index name}}/{{type}}/_search?scroll=10m&pretty' -d '{
"query": {
"filtered": {
"query": {
"match_all": {}
}}'



Лучший способ настроить размер - использовать size = number перед URL-адресом

Curl -XGET "http://localhost:9200/logstash-*/_search?size=50&pretty"

Примечание: максимальное значение, которое может быть определено в этом размере, равно 10000. Для любого значения, превышающего десять тысяч, оно ожидает использования функции прокрутки, которая минимизирует любые шансы на воздействие на производительность.




В приведенном ниже запросе будет возвращен NO_OF_RESULTS, который вы хотите вернуть.

curl -XGET 'localhost:9200/foo/_search?size=NO_OF_RESULTS' -d '
{
"query" : {
    "match_all" : {}
  }
}'

Теперь вопрос в том, что вы хотите, чтобы все записи были возвращены. Поэтому, естественно, перед написанием запроса вы не будете знать значение NO_OF_RESULTS .

Как мы знаем, сколько записей существует в вашем документе? Просто введите запрос ниже

curl -XGET 'localhost:9200/foo/_search' -d '

Это даст вам результат, похожий на приведенный ниже

 {
hits" : {
  "total" :       2357,
  "hits" : [
    {
      ..................

Итоговый результат показывает, сколько записей доступно в вашем документе. Итак, это хороший способ узнать значение NO_OF РЕЗУЛЬТАТЫ

curl -XGET 'localhost:9200/_search' -d ' 

Искать все типы во всех индексах

curl -XGET 'localhost:9200/foo/_search' -d '

Поиск всех типов в индексе foo

curl -XGET 'localhost:9200/foo1,foo2/_search' -d '

Поиск всех типов в индексах foo1 и foo2

curl -XGET 'localhost:9200/f*/_search

Искать все типы в любых индексах, начинающихся с f

curl -XGET 'localhost:9200/_all/type1,type2/_search' -d '

Поиск типов пользователей и твитов во всех индексах




http://localhost:9200/foo/_search/ ? size = 1000 & pretty = 1

вам нужно будет указать параметр запроса размера, поскольку по умолчанию 10




Некоторые из них дали правильный ответ на использование сканирования и прокрутки, по-видимому, я не мог получить полный ответ, который бы волшебным образом работал. Когда кто-то хочет вытащить записи, вам нужно запустить следующую команду curl.

curl -XGET 'http://ip1:9200/myindex/_search?scroll=1m' -d '
{
    "query": {
            "match_all" : {}
    }
}
'

Но мы этого не делаем. Результатом указанной выше команды curl будет что-то вроде этого

{"_scroll_id":"c2Nhbjs1OzUyNjE6NU4tU3BrWi1UWkNIWVNBZW43bXV3Zzs1Mzc3OkhUQ0g3VGllU2FhemJVNlM5d2t0alE7NTI2Mjo1Ti1TcGtaLVRaQ0hZU0FlbjdtdXdnOzUzNzg6SFRDSDdUaWVTYWF6YlU2Uzl3a3RqUTs1MjYzOjVOLVNwa1otVFpDSFlTQWVuN211d2c7MTt0b3RhbF9oaXRzOjIyNjAxMzU3Ow==","took":109,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":22601357,"max_score":0.0,"hits":[]}}

важно, чтобы _scroll_id был удобен, так как в следующий раз вы выполните следующую команду:

    curl -XGET  'localhost:9200/_search/scroll'  -d'
    {
        "scroll" : "1m", 
        "scroll_id" : "c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1" 
    }
    '

Однако, я не думаю, что это легко запустить это вручную. Лучше всего написать код Java, чтобы сделать то же самое.

    private TransportClient client = null;
    private Settings settings = ImmutableSettings.settingsBuilder()
                  .put(CLUSTER_NAME,"cluster-test").build();
    private SearchResponse scrollResp  = null;

    this.client = new TransportClient(settings);
    this.client.addTransportAddress(new InetSocketTransportAddress("ip", port));

    QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
    scrollResp = client.prepareSearch(index).setSearchType(SearchType.SCAN)
                 .setScroll(new TimeValue(60000))                            
                 .setQuery(queryBuilder)
                 .setSize(100).execute().actionGet();

    scrollResp = client.prepareSearchScroll(scrollResp.getScrollId())
                .setScroll(new TimeValue(timeVal))
                .execute()
                .actionGet();

Теперь LOOP в последней команде использует SearchResponse для извлечения данных.




используйте server:9200/_stats также, чтобы получить статистику обо всех ваших псевдонимах .. как размер и количество элементов для каждого псевдонима, это очень полезно и предоставляет полезную информацию




Для Elasticsearch 6.x

Запрос: http://localhost:9200/foo/_search?pretty=true

Ответ: В Hits-> total укажите количество документов

{«взял»: 1, «timed_out»: false, «_shards»: {«total»: 5, «success»: 5, «skipped»: 0, «failed»: 0}, «hits»: {"total ": 1001," max_score ": 1," hits ": [{