我已经映射了一个字段,但输入数据是十进制(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'](...)
表示法。
最佳答案
在您的情况下,该字段应该是double
,而不是long
。且100.123
的索引值为100
,您将舍弃小数。
在这一点上,除了理想的重新索引编制之外,可能仅通过脚本过滤即可:
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "_source['nr'].value >= param1 && _source['nr'].value <= param2",
"params": {
"param1": 100,
"param2": 200
}
}
}
}
}
}
但由于加载了
_source
,价格会很高。
关于elasticsearch - Elasticsearch范围不适用于双索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764884/