Elasticsearch: как сначала получить все записи с самой последней записью

#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 /…