[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-адрес, который вы использовали бы для этого, пожалуйста?




В приведенном ниже запросе будет возвращен 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




используйте 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 ": [{




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. Для любого значения, превышающего десять тысяч, оно ожидает использования функции прокрутки, которая минимизирует любые шансы на воздействие на производительность.




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




Related