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.
Это все дело можно кастомизировать.

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

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

Похожие вопросы