by25
@by25
Веб-разработчик

Как использовать строки для выборок требующих «numeric»?

Суть проблемы такая. В типе есть постоянные поля, а также дополнтиельные динамические поля и они для каждой записи разные.
// Постоянные поля
product_id
title
description
// динамические, у каждой записи они могут быть разные
property_45
property_7


Например, необходимо сделать выборку вида (или агрегацию данных):
{
    "range" : {
        "property_7" : {
            "gte" : 10,
            "lte" : 20,
        }
    }
}


Т.к. тип поля "property_7" строка, то будет происходить выборка по алгоритму строк. Как данные сконвертировать на лету в float и уже потом по ним производить необходимые действия?

Нагуглил решение со скриптом, но так и не получилось завести:
{
    "aggs" : {
        "my_stats" : { "stats" : { 
            "script" : "try { Integer.parseInt(doc['property_7'].value); } catch(Exception e){ return 0;}"
        }}
    }
}


Вываливается exception: "script_exception: failed to compile groovy script"
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@exenza
Похоже, речь о Dynamic mapping
Т.к. тип поля "property_7" строка, то будет происходить выборка по алгоритму строк.

В динамичном маппинге тип данных можно задать, это называют Dynamic field mapping.
Это все дело можно кастомизировать.

Решение со скриптом - кажется страшным хаком, имхо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 300 000 до 500 000 ₽
от 1 000 000 до 1 200 000 ₽
Сима-ленд Екатеринбург
от 120 000 до 250 000 ₽
26 апр. 2024, в 18:27
200000 руб./за проект
26 апр. 2024, в 18:24
80000 руб./за проект
26 апр. 2024, в 18:00
500 руб./за проект