我在PostgreSQL中有一个表,列的类型是numeric(40, 0)。
我希望能在这个领域进行过滤和排序。
问题是,当数据从PostgreSQL查询,然后转换为json时,大整数值被转换为"text",并在弹性搜索中被识别为“文本”类型,不能用于过滤和排序。
弹性搜索的 type只能支持最多10^20的整数,但我想支持最多10^40的整数。
如何导入这些数据?
发布于 2019-04-10 20:46:40
虽然我没有在10 duodecillion+范围内添加数字支持的解决方案,但我想指出,在使用动态映射时,您要发送的数字字符串被存储为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"
}
}
]
}https://stackoverflow.com/questions/55620306
复制相似问题