Поиск API Elasticsearch прокрутки «от»

У меня есть скрипт, который генерирует карты сайта на основе индекса URL http://example.com/sitemap.index.xml где index это число >0 это определяет, какие результаты должны быть включены в каждый кусок.

$chunk = 10000;
$counter = 0;

$scroll = $es->search(array(
"index" => "index",
"type" => "type",
"scroll" => "1m",
"search_type" => "scan",
"size" => 10,
"from" => $chunk * ($index - 1)
));
$sid = $scroll['_scroll_id'];

while($counter < $chunk){
$docs = $es->scroll(array(
"scroll_id" => $sid,
"scroll" => "1m"));
$sid = $docs['_scroll_id'];
$counter += count($docs['hits']['hits']);
}

// ...

Теперь каждый раз, когда я получаю доступ http://example.com/sitemap.1.xml или же http://example.com/sitemap.2.xml результаты, возвращаемые ES, точно такие же. Возвращается 50 результаты (10 на каждый осколок), но, кажется, не учитывают from = 0, from = 10000,

я использую elasticsearch-php как библиотека ES.

Есть идеи?

1

Решение

В Java это можно сделать следующим образом

QueryBuilder query = QueryBuilders.matchAllQuery();
SearchResponse scrollResp = Constants.client.prepareSearch(index)
.setTypes(type).setSearchType(SearchType.SCAN)
.setScroll(new TimeValue(600000)).setQuery(query)
.setSize(500).execute().actionGet();
while (true) {
scrollResp = Constants.client
.prepareSearchScroll(scrollResp.getScrollId())
.setScroll(new TimeValue(600000)).execute().actionGet();
System.out.println("Record count :"+ scrollResp.getHits().getHits().length);
total = total + scrollResp.getHits().getHits().length;
System.out.println("Total record count: " + total);
for (SearchHit hit : scrollResp.getHits()) {
//handle the hit
}
// Break condition: No hits are returned
if (scrollResp.getHits().getHits().length == 0) {
System.out.println("All records are fetched");
break;
}
}

Надеюсь, поможет.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector