Как импортировать данные с большим столбцом int в упругий поиск? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть таблица в PostgreSQL со столбцом, тип которого numeric(40, 0).

Я бы хотел иметь возможность фильтровать и сортировать по этому полю.

Проблема заключается в том, что когда данные запрашиваются из PostgreSQL, а затем преобразуются в json, большие целочисленные значения преобразуются в «текст» и будут распознаваться как «текстовый» тип в упругом поиске, который можетбыть использованы для фильтрации и сортировки.

Тип long из упругого поиска может поддерживать только целые числа до 10 ^ 20, но я бы хотел поддерживать целые числа до 10 ^ 40.

Как импортировать такие данные?

1 Ответ

1 голос
/ 10 апреля 2019

Хотя у меня нет решения для добавления поддержки чисел в диапазоне 10 duodecillion +, я хотел отметить, что при использовании динамического отображения отправляемая строка цифр сохраняется как text * 1002.* и keyword тип данных.Таким образом, если вы хотите выполнить сортировку или фильтрацию, вы можете работать с полем keyword.

Например:

PUT random_big

POST random_big/_doc
{
  "num": "10000000000000000000000000000000000000000"
}
POST random_big/_doc
{
  "num": "10000000000000000000000000000000000000001"
}
POST random_big/_doc
{
  "num": "10000000000000000001000000000000000000000"
}

Проверка соответствия (GET random_big/_mapping) показывает:

{
  "random_big" : {
    "mappings" : {
      "_doc" : {
        "properties" : {
          "num" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}

И сортировка может быть выполнена следующим образом:

GET random_big/_search
{
  "sort": [
    {
      "num.keyword": {
        "order": "asc"
      }
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...