#elasticsearch #elasticsearch-5
#elasticsearch #elasticsearch-5
Вопрос:
Как я могу получить все записи из elasticsearch с самой последней записью в качестве первой записи
например,
Если у меня есть 5 библиотек с идентификаторами от 1 до 5, как я могу получить полный список книг из библиотеки 5, который отсортирован по последней введенной книге.
Вот мой пример запроса, который состоит из вложенных полей
http://localhost:9200/library*/_search
{
"size": 1000,
"_source": [
"library.bookname","library.author"
],
"query": {
"bool": {
"must": [
{
"match": {
"library.id": 5
}
}
]
}
}
}
Комментарии:
1. Это зависит от того, как вы определяете «последнюю» — есть ли у вас поле метки времени или аналогичное в вашем сопоставлении документов? Если да, выполните сортировку по этому полю. Если нет, то вы не сможете.
2. Должен ли я добавить временную метку в качестве поля в elasticsearch для сортировки?
Ответ №1:
Вы можете использовать опцию сортировки в теле запроса. Если вы хотите отсортировать их по последней введенной книге, есть order
опция, для которой следует установить значение desc
. Для этого у вас должно быть поле метки времени или аналогичное поле, которое можно отсортировать по порядку ввода.
Допустим, у вас есть поле даты timestamp
, и оно будет использоваться для сортировки по последней введенной, тогда вы можете сделать что-то вроде этого для сортировки результата: "sort": { "timestamp": { "order": "desc" } }
.
Итак, ваш пример запроса будет выглядеть следующим образом:
http://localhost:9200/library*/_search
{
"size": 1000,
"sort": { "timestamp": { "order": "desc" } },
"_source": [
"library.bookname","library.author"
],
"query": {
"bool": {
"must": [
{
"match": {
"library.id": 5
}
}
]
}
}
}
Комментарии:
1. Это позволяет получить только 1000 записей, если у меня 10000 записей, это не удается…. Как должен выглядеть запрос, если мне нужны все записи целиком?
2. @ashfak Для этой функции можно использовать scroll api elastic.co/guide/en/elasticsearch/reference/current /…