我在PostgreSQL中有一个表,其中的列类型为numeric(40, 0)
。
我希望能够对此字段进行过滤和排序。
问题是当从PostgreSQL查询数据,然后将其转换为json,大整数值转换为“文本”,并且在弹性搜索中将被识别为“文本”类型,无法使用用于过滤和排序。
弹性搜索中的 The long
type仅支持不超过10 ^ 20的整数,但我想支持不超过10 ^ 40的整数。
如何导入此类数据?
答案 0 :(得分:1)
虽然我没有解决方案来增加对10十亿以上的数字的支持,但我想指出的是,在使用动态映射时,要发送的数字字符串将同时存储为text
和 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"
}
}
]
}