Каков самый быстрый способ получить все _ID определенного индекса из ElasticSearch? Можно ли использовать простой запрос? Один из моих индексов содержит около 20 000 документов.Эффективный способ извлечения всех _ids в ElasticSearch
ответ
Edit: Пожалуйста, прочитайте ответ @Aleck Ландграф, тоже
Вы просто хотите _id
поле elasticsearch-внутренний? Или поле id
из ваших документов?
Для первых, попробуйте
curl http://localhost:9200/index/type/_search?pretty=true -d '
{
"query" : {
"match_all" : {}
},
"stored_fields": []
}
'
Note 2017 Обновление: Сообщение первоначально включал "fields": []
, но с тех пор название изменилось и stored_fields
это новое значение.
Результат будет содержать только «метаданные» ваших документов
{
"took" : 7,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 4,
"max_score" : 1.0,
"hits" : [ {
"_index" : "index",
"_type" : "type",
"_id" : "36",
"_score" : 1.0
}, {
"_index" : "index",
"_type" : "type",
"_id" : "38",
"_score" : 1.0
}, {
"_index" : "index",
"_type" : "type",
"_id" : "39",
"_score" : 1.0
}, {
"_index" : "index",
"_type" : "type",
"_id" : "34",
"_score" : 1.0
} ]
}
}
Для последнего, если вы хотите, чтобы включить поле из документа, просто добавьте его в fields
массив
curl http://localhost:9200/index/type/_search?pretty=true -d '
{
"query" : {
"match_all" : {}
},
"fields": ["document_field_to_be_returned"]
}
'
Не получится ли это всего 10 результатов? –
Выполнение прямого запроса - не самый эффективный способ сделать это. Когда вы выполняете запрос, он должен отсортировать все результаты перед их возвратом. Прокрутка и сканирование, упомянутые в ответе ниже, будут намного эффективнее, потому что они не сортируют результат, прежде чем возвращать его. – aamiri
Больше не работает в 5.x, поле 'fields' было удалено, вместо этого добавьте' '_source": false' param. –
Другой вариант
curl 'http://localhost:9200/index/type/_search?pretty=true&fields='
вернется _index, _type, _ id и _score.
-1 Лучше использовать сканирование и прокрутку при доступе к нескольким документам. Это «быстрый способ» сделать это, но не будет работать хорошо, а также может потерпеть неудачу при больших индексах. – PhaedrusTheGreek
В разделе 6.2: «request ... содержит нераспознанный параметр: [fields]» –
вы также можете сделать это в Python, который дает вам правильный список:
import elasticsearch
es = elasticsearch.Elasticsearch()
res = es.search(
index=your_index,
body={"query": {"match_all": {}}, "size": 30000, "fields": ["_id"]})
ids = [d['_id'] for d in res['hits']['hits']]
Лучше использовать scroll and scan, чтобы получить список результатов, так elasticsearch не имеет ранга и сортировки результатов.
С elasticsearch-dsl
питона Lib это может быть достигнуто путем: журнал
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
es = Elasticsearch()
s = Search(using=es, index=ES_INDEX, doc_type=DOC_TYPE)
s = s.fields([]) # only get ids, otherwise `fields` takes a list of field names
ids = [h.meta.id for h in s.scan()]
консоли:
GET http://localhost:9200/my_index/my_doc/_search?search_type=scan&scroll=5m [status:200 request:0.003s]
GET http://localhost:9200/_search/scroll?scroll=5m [status:200 request:0.005s]
GET http://localhost:9200/_search/scroll?scroll=5m [status:200 request:0.005s]
GET http://localhost:9200/_search/scroll?scroll=5m [status:200 request:0.003s]
GET http://localhost:9200/_search/scroll?scroll=5m [status:200 request:0.005s]
...
Примечание: прокрутки тянет партии результатов запроса и сохраняет курсор открыт для заданного количества времени (1 минута, 2 минуты, которую вы можете обновить); scan отключает сортировку. Вспомогательная функция scan
возвращает генератор питона, который можно безопасно повторить.
Метод 'fields' был удален в версия '5.0.0' (см. https://elasticsearch-dsl.readthedocs.io/en/latest/Changelog.html?highlight=fields(#id2). Теперь вы должны использовать' s = s.source ([]). – illagrenan
данная ссылка недоступна. Отображение 404 –
search_type = проверка устарела с версии 2.1. ([Https://www.elastic.co/guide/en/elasticsearch/reference/2.1/breaking_21_search_changes.html](https: //www.elastic.co/guide/en/elasticsearch/reference/2.1/breaking_21_search_changes.html)) – aleha
Вдохновленный @ Aleck-Ландграф ответ, для меня он работал, используя непосредственно scan функцию в стандартной elasticsearch питона API:
from elasticsearch import Elasticsearch
from elasticsearch.helpers import scan
es = Elasticsearch()
for dobj in scan(es,
query={"query": {"match_all": {}}, "fields" : []},
index="your-index-name", doc_type="your-doc-type"):
print dobj["_id"],
конкретизируя 2 ответов на @ Robert-Lujo и @ Aleck-Ландграф (кто-то с правами доступа могут с удовольствием переместить это комментарий): , если вы не хотите печатать, но получить все внутри списка из возвращенного генератора, вот что я использую:
from elasticsearch import Elasticsearch,helpers
es = Elasticsearch(hosts=[YOUR_ES_HOST])
a=helpers.scan(es,query={"query":{"match_all": {}}},scroll='1m',index=INDEX_NAME)#like others so far
IDs=[aa['_id'] for aa in a]
Url -> http://localhost:9200/<index>/<type>/_query
http method -> DELETE
Query -> {"query": {"match_all": {}}, "size": 30000, "fields": ["_id"]})
Для поиска elasticsearch 5.x вы можете использовать поле «_source».
GET /_search
{
"_source": false,
"query" : {
"term" : { "user" : "kimchy" }
}
}
"fields"
был устаревшим. (Ошибка: «Поле [поля] больше не поддерживается, используйте [stored_fields] для извлечения сохраненных полей или фильтрации источника, если поле не сохраняется»)
Бонусные баллы за добавление текста ошибки. Сообщения об ошибках Elasticsearch в основном не кажутся очень googlable :( – AmericanUmlaut
- 1. Эффективный способ получить только _ids в ElasticSearch - Java
- 2. SharePoint: эффективный способ извлечения всех элементов списка
- 3. Наиболее эффективный способ извлечения всех натуральных чисел из строки
- 4. Эффективный способ извлечения форматированных данных в C
- 5. Эффективный способ извлечения данных в двойные кавычки
- 6. Elasticsearch приоритизирует определенные _ids, но не фильтрует?
- 7. Самый эффективный способ моделирования данных в Elasticsearch
- 8. Самый эффективный способ отправки документов в elasticsearch
- 9. Более эффективный способ извлечения данных из MySQL
- 10. Более эффективный способ извлечения данных Firebase?
- 11. CoreData: эффективный способ извлечения и связывания объектов
- 12. Самый эффективный способ хранения и извлечения данных
- 13. Эффективный способ извлечения из массива объектов
- 14. Каков наиболее эффективный способ получить результаты Elasticsearch?
- 15. Самый эффективный способ извлечения подстроки строки в PHP
- 16. Каков наиболее эффективный способ извлечения данных в этом случае?
- 17. Способ извлечения всех строк из проекта .net?
- 18. Самый эффективный способ перебора всех элементов DOM?
- 19. Самый эффективный способ печати всех вариантов строки?
- 20. эффективный способ хранения и сравнения всех элементов
- 21. Каков наиболее эффективный способ извлечения объектов отношений «многие ко многим»?
- 22. Наиболее эффективный способ извлечения тегов из нескольких строк
- 23. Любой эффективный способ получить уникальные условия от индекса Elasticsearch
- 24. Более эффективный способ загрузки и извлечения файла JSON в swift?
- 25. Самый эффективный способ хранения и извлечения данных карты в AS3?
- 26. Если алгоритм в P эффективный способ извлечения решений?
- 27. Самый эффективный способ извлечения ссылок на встроенные ресурсы в JSOUP
- 28. Каков эффективный способ извлечения изображений из Firebase в Android?
- 29. Поисковый запрос Elasticsearch для извлечения всех записей NEST
- 30. Необычный/эффективный способ проверки наличия документа в elasticsearch
Я нашел [это] (https: // github. com/elastic/elasticsearch/issues/17159) очень полезно. – shellbye