我已将字段映射为long,但输入数据为十进制(100.123
)。
我已经尝试了range
次搜索,但它无法正常工作。我已经验证并且数据在正确的索引中,如果我搜索丢失/存在,我可以找到它们。
范围查询:
"range": {
"nr_val": {
"from": 123,
"to": 1234
}
}
Elasticsearch是否忽略了这些值,将它们视为范围搜索中的字符串?
所以在我的情况下,除了完全转储和重新导入之外,我还能做些什么才能使范围搜索from:100, to:200
适用于100.123?有没有可用的转换选项?
{
"state": "open",
"settings": {
"index": {
"creation_date": "1447858537098",
"number_of_shards": "5",
"uuid": "iiPzQXasQadvnDF1da8oMw",
"version": {
"created": "1070299"
},
"number_of_replicas": "1"
}
},
"mappings": {
"mongo_doc": {
"properties": {
"parent": {
"type": "string"
},
"data.current.specs.nr._nrm_val": {
"type": "double"
},
"data.current.specs.nr_b._nrm_val": {
"type": "double"
},
"data": {
"properties": {
"current": {
"properties": {
"specs": {
"properties": {
"nr": {
"properties": {
"_nrm_val": {
"type": "double"
}
}
},
"nr_b": {
"properties": {
"_nrm_val": {
"type": "long"
}
}
}
}
}
}
}
}
}
}
}
},
"aliases": []
}
似乎映射不太正确......切换到['data']['properties']['current']['properties'](...)
符号。
答案 0 :(得分:1)
在您的情况下,该字段应该是double
,而不是long
。 100.123
的索引值为100
,您将丢失小数。
此时,除了重新索引这是理想的,可能只是脚本过滤会这样做:
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "_source['nr'].value >= param1 && _source['nr'].value <= param2",
"params": {
"param1": 100,
"param2": 200
}
}
}
}
}
}
但由于_source
加载,它会很昂贵。