在弹性搜索中是否有一种方法可以在查询时将字符串转换为长值?
我的文档中有这样的内容: “属性”:[ { “关键”:“年龄”, “价值”:“23” }, { “关键”:“名字”, “价值”:“约翰” }, ],
我想写一个查询来获取所有年龄> gt的人23.为此,我需要将值转换为int,以便在密钥为age时对其进行比较。
上述文档是针对此问题的一个非常具体的示例。
非常感谢你的帮助。
谢谢!
答案 0 :(得分:2)
您可以使用脚本
POST /index/type/_search
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "foreach(attr : _source['attributes']) {if ( attr['key']=='age') { return attr['value'] > ageValue;} } return false;",
"params" : {
"ageValue" : 23
}
}
},
"query": {
"match_all": {}
}
}
}
}
UPD:请注意,应在elasticsearch.yml中启用动态脚本。
此外,我认为您可以通过重构文档结构并为年龄字段应用适当的映射来存档更好的查询性能。