Прокрутка и Пейджинг в Elastic / Nest 6+ - PullRequest
0 голосов
/ 27 июня 2018

Введение

Я обновляю эластичную версию до 6.3 (ранее мы использовали 5.4. Наше приложение написано на C #, поэтому мы используем NEST.NET dll для общения с сервером Elastic, поэтому мы также обновляем его до версии 6.0.0.0.

Вариант использования - До

До версии 5 мне удавалось выполнить этот запрос:

jsonStr =" 
   {
      "from": 16224,
      "size": 12,
      "query": {
        "bool": {
          "filter": [
            {
              "bool": {
                "must": [
                  {
                    "terms": {
                      "COMPANY": [
                        "AMP Services Ltd"
                      ]
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
}"

Используя этот код NEST / C #:

Func<SearchRequestParameters, SearchRequestParameters> requestParameters = null;
requestParameters = a => a.Scroll(new TimeSpan(0, 1, 0));
response = Connection.Client.GetInstance().LowLevel.Search<dynamic>("myindex", new PostData<dynamic>(jsonStr), requestParameters);

И с этим я смог получить данные без проблем,

Вариант использования - СЕЙЧАС

Теперь, с версией 6, я пытаюсь выполнить тот же самый запрос:

jsonStr ="
{
  "from": 16224,
  "size": 12,
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "must": [
              {
                "terms": {
                  "COMPANY": [
                    "AMP Services Ltd"
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}"

Используя этот код NEST / C # (поскольку сигнатуры метода previus более недоступны):

SearchRequestParameters searchRequest = new SearchRequestParameters();
searchRequest.Scroll = new TimeSpan(0, 1, 0);
response = Connection.Client.GetInstance().LowLevel.Search<StringResponse>("myindex", PostData.String(jsonStr), searchRequest);

И я получаю эту ошибку: "Ошибка проверки: 1: использование [from] недопустимо в контексте прокрутки;"

Документация

Я не смог ничего найти здесь (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html) и здесь (https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/sliced-scroll-search-usage.html), чтобы помочь мне заменить эту логику. На форумах тоже ничего нет.

Ребята, у вас есть какие-то идеи по этому поводу?

Спасибо

1 Ответ

0 голосов
/ 27 июня 2018

Похоже, это связано с изменением проверки в Elasticsearch в 6.0.0 ; В 5.x параметр from был позволен для запроса прокрутки, но игнорируется. Теперь в 6.0.0 Elasticsearch стал более строгим и проверяет, присутствует ли from для запроса прокрутки, и, если он есть, возвращает неверный ответ с соответствующей ошибкой проверки.

Поскольку параметр from не имеет смысла для запроса прокрутки, решение этой проблемы состоит в том, чтобы сделать один из этих двух

  1. Удаляет параметр from при использовании Scroll API
  2. Продолжайте использовать параметр from, но не используйте Scroll API.

Кроме того, если вам нужно прокрутить много документов, вы можете использовать ScrollAll() наблюдаемый помощник для этого.

...