У меня есть небольшая база данных в Elasticsearch, и в целях тестирования я хотел бы получить все записи обратно. Я пытаюсь использовать URL-адрес в форме ...
http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}
Может кто-нибудь дать мне URL, который вы бы использовали для этого, пожалуйста?
database
elasticsearch
query-string
elasticsearch-dsl
Джон Ливермор
источник
источник
Ответы:
Я думаю, что синтаксис Lucene поддерживается так:
http://localhost:9200/foo/_search?pretty=true&q=*:*
размер по умолчанию равен 10, поэтому вам также может понадобиться
&size=BIGNUMBER
получить более 10 предметов. (где BIGNUMBER равен числу, которое, по вашему мнению, больше, чем ваш набор данных)НО, документацияasticsearch предлагает для больших наборов результатов, используя тип поиска сканирования.
НАПРИМЕР:
и затем продолжайте запрашивать согласно предложенной выше ссылке на документацию.
РЕДАКТИРОВАТЬ:
scan
устарел в 2.1.0.scan
не предоставляет никаких преимуществ по сравнению с обычнымscroll
запросом, отсортированным по_doc
. ссылка на эластичные документы (замечено @ christophe-roussy)источник
Обратите внимание на параметр размера , который увеличивает количество отображаемых обращений со значения по умолчанию (10) до 1000 за шард.
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html
источник
max_result_window
asticsearch (ES) поддерживает запрос GET или POST для получения данных из индекса кластера ES.
Когда мы делаем GET:
Когда мы делаем POST:
Я бы предложил использовать плагин для пользовательского интерфейса сasticsearch http://mobz.github.io/elasticsearch-head/ Это поможет вам лучше понять создаваемые вами индексы, а также протестировать ваши индексы.
источник
from
+size
не может быть больше значенияindex.max_result_window
индекса, по умолчаниюcurl -XGET ... -d '{...}'
что этоun
официальный смешанный стиль запроса. Спасибо за показ правильных форматов GET и POST.Приведенный ниже запрос вернет NO_OF_RESULTS, который вы хотели бы получить ..
Теперь вопрос в том, что вы хотите, чтобы все записи были возвращены. Естественно, перед написанием запроса вы не будете знать значение NO_OF_RESULTS .
Как мы узнаем, сколько записей существует в вашем документе? Просто введите запрос ниже
Это даст вам результат, который выглядит так, как показано ниже
В результате общая сумма показывает, сколько записей доступны в документе. Итак, это хороший способ узнать значение NO_OF RESULTS
Поиск всех типов по всем показателям
Поиск всех типов в индексе foo
Поиск всех типов в индексах foo1 и foo2
Поиск всех типов в любых индексах, начинающихся с f
Поиск типов пользователей и твитов по всем показателям
источник
Это лучшее решение, которое я нашел с помощью клиента Python
https://gist.github.com/drorata/146ce50807d16fd4a6aa
Использование Java-клиента
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html
источник
elasticsearch_dsl==5.4.0
и это работает безsearch_type = 'scan',
.size=10000
скоростью 110 тыс. С , где-то между 5-7 итерациями. сstatus=127
,main ERROR Null object returned for RollingFile in Appenders
,main ERROR Unable to locate appender "rolling" for logger config "root"
Нет входит в/var/log/elasticsearch/elasticsearch.log
scan
Напомним, что клиенты python реализуют помощников, которые выполняют прокрутку под капотом (начиная с версии 5.xx по крайней мере)search_type = 'scan'
устарел. Подобный код будет работать без этого, хотя есть некоторые интересные отличия, которые хорошо скрыты в старой документации. astic.co/guide/en/elasticsearch/reference/1.4/… В частности, при переходе без использования search_type = scan этот первый запрос 'search' будет сопровождаться первой партией результатов для обработки.Elasticsearch станет значительно медленнее, если вы просто добавите в качестве размера какое-то большое число, и один из способов получения всех документов - использовать идентификаторы сканирования и прокрутки.
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
В Elasticsearch v7.2 вы делаете это так:
Результаты этого будут содержать _scroll_id, который вы должны запросить, чтобы получить следующие 100 фрагментов.
источник
search_type=scan
сейчас устарела. Таким образом, вы должны удалить это, но затем поведение немного изменилось. Первая партия данных возвращается с начального поискового вызова. Ссылка, которую вы предоставляете, показывает правильный способ сделать это.используйте
server:9200/_stats
также для получения статистики обо всех ваших псевдонимах, таких как размер и количество элементов на псевдоним, это очень полезно и предоставляет полезную информациюисточник
Если вы хотите получить много тысяч записей, тогда ... несколько человек дали правильный ответ с помощью 'scroll' (Примечание: некоторые люди также предложили использовать 'search_type = scan'. Это устарело, а в v5.0 удалено). Тебе это не нужно)
Начните с запроса 'search', но указав параметр 'scroll' (здесь я использую время ожидания в 1 минуту):
Это включает в себя вашу первую «партию» хитов. Но мы не закончили здесь. Вывод вышеуказанной команды curl будет выглядеть примерно так:
Важно иметь под рукой _scroll_id, так как далее вы должны выполнить следующую команду:
Тем не менее, передача scroll_id - это не то, что нужно делать вручную. Лучше всего написать код для этого. например, в Java:
Теперь LOOP для последней команды использует SearchResponse для извлечения данных.
источник
Просто! Вы можете использовать
size
иfrom
параметр!затем вы меняете
from
постепенно, пока не получите все данные.источник
from
+size
не могут быть больше, чем значение индекса index.max_result_window, которое по умолчаниюfrom
иsize
-подходом вы столкнетесь с проблемой Deep PAGINATION. Используйте API прокрутки, чтобы создать дамп всех документов.Лучший способ отрегулировать размер - использовать размер = число перед URL
Примечание. Максимальное значение, которое можно определить в этом размере, составляет 10000. Для любого значения, превышающего десять тысяч, ожидается, что вы будете использовать функцию прокрутки, которая сведет к минимуму любые шансы влияния на производительность.
источник
Вы можете использовать
_count
API, чтобы получить значение дляsize
параметра:Возвращает
{count:X, ...}
. Извлеките значение 'X', а затем выполните фактический запрос:источник
http: // localhost: 9200 / foo / _search / ? размер = 1000 & красивая = 1
вам нужно будет указать параметр запроса размера по умолчанию 10
источник
Параметр size увеличивает количество отображаемых обращений со значения по умолчанию (10) до 500.
Изменение с шаг за шагом , чтобы получить все данные.
источник
Для Elasticsearch 6.x
Запрос:
GET /foo/_search?pretty=true
Ответ: В Hits-> total укажите количество документов.
источник
Если это небольшой набор данных (например, 1K записей) , вы можете просто указать
size
:Матч всех запросов не требуется, так как это подразумевается.
Если у вас есть набор данных среднего размера, например, 1M записей , у вас может не хватить памяти для его загрузки, поэтому вам нужна прокрутка .
Свиток похож на курсор в БД. В Elasticsearch он запоминает, где вы остановились, и сохраняет то же представление индекса (то есть предотвращает уход поисковика с обновлением , предотвращает слияние сегментов ).
По API, вы должны добавить параметр прокрутки к первому запросу:
Вы вернетесь на первую страницу и прокрутите ID:
Помните, что и идентификатор прокрутки, который вы получаете, и время ожидания действительны для следующей страницы . Распространенной ошибкой здесь является указание очень большого тайм-аута (значения
scroll
), которое будет охватывать обработку всего набора данных (например, 1М записей) вместо одной страницы (например, 100 записей).Чтобы перейти на следующую страницу, введите последний идентификатор прокрутки и время ожидания, которое должно длиться до получения следующей страницы:
Если у вас есть много для экспорта (например, документы 1B) , вы хотите распараллелить. Это можно сделать с помощью нарезанного свитка . Скажем, вы хотите экспортировать в 10 потоков. Первый поток выдаст такой запрос:
Вы получаете первую страницу и идентификатор прокрутки, точно так же, как обычный запрос прокрутки. Вы будете использовать его точно так же, как обычный свиток, за исключением того, что вы получите 1/10 данных.
Другие темы будут делать то же самое, за исключением того,
id
что будет 1, 2, 3 ...источник
источник
По умолчанию Elasticsearch возвращает 10 записей, поэтому размер должен быть указан явно.
Добавьте размер с запросом, чтобы получить желаемое количество записей.
http: // {host}: 9200 / {index_name} / _search? pretty = true & size = (количество записей)
Примечание. Максимальный размер страницы не может быть больше, чем значение индекса index.max_result_window, которое по умолчанию равно 10 000.
источник
От Kibana DevTools его:
источник
Простое решение с использованием пакета pythonasticsearch-dsl :
Смотрите также https://elasticsearch-dsl.readthedocs.io/en/latest/api.html#elasticsearch_dsl.Search.scan .
источник
Максимальный результат, который будет возвращаться с помощьюasticSearch, составляет 10000 при условии размера
После этого вам нужно использовать Scroll API для получения результата, получить значение _scroll_id и поместить это значение в scroll_id.
источник
Официальная документация дает ответ на этот вопрос! Вы можете найти это здесь .
Вы просто заменяете size (1) на количество результатов, которое хотите увидеть!
источник
Чтобы вернуть все записи из всех индексов, вы можете сделать:
curl -XGET http://35.195.120.21:9200/_all/_search?size=50&pretty
Вывод:
источник
источник
Никто, кроме @Akira Sendoh не ответил, как на самом деле получить ВСЕ документы. Но даже это решение приводит к сбою моего сервиса ES 6.3 без логов. Единственное, что сработало для меня при использовании низкоуровневой
elasticsearch-py
библиотеки, - это помощник по сканированию , использующийscroll()
API:Тем не менее, более чистый путь в настоящее время, кажется, заключается в использовании
elasticsearch-dsl
библиотеки, которая предлагает более абстрактные, более чистые вызовы, например: http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#hitsисточник
Если до сих пор кто-то ищет все данные, которые будут получены от Elasticsearch, как я, для некоторых случаев, вот что я сделал. Более того, все данные означают все индексы и все типы документов. Я использую Elasticsearch 6.3
Elasticsearch ссылка
источник
это запрос, чтобы выполнить то, что вы хотите (я предлагаю использовать Kibana, так как это помогает лучше понимать запросы)
чтобы получить все записи, вы должны использовать запрос "match_all".
Размер - это количество записей, которые вы хотите получить (ограничение). по умолчанию ES вернет только 10 записей
от как пропустить, пропустить первые 3 записи.
Если вы хотите извлечь все записи, просто используйте значение из поля «итоги» из результата, как только вы нажмете на этот запрос из Kibana, и используйте его с «размером».
источник
Использование Elasticsearch 7.5.1
в случае, если вы также можете указать размер вашего массива с помощью & size = $ {число}
если вы не знаете свой индекс
источник
Используя консоль kibana и my_index в качестве индекса для поиска, можно внести следующее. Попросив индекс вернуть только 4 поля индекса, вы также можете добавить размер, чтобы указать, сколько документов вы хотите вернуть по индексу. Начиная с ES 7.6 вы должны использовать _source, а не фильтровать, он будет реагировать быстрее.
источник
Вы можете использовать размер = 0, это вернет вам все документы пример
источник