查询 ElasticSearch 数据时进行转换

Casting when querying ElasticSearch data

在 elasticsearch 中有没有一种方法可以在查询时将字符串转换为长值?

我的文档中有这样的内容: "attributes": [ { "key": "age", "value": "23" }, { "key": "name", "value": "John" }, ],

我想编写一个查询来获取所有年龄 > 23 的人。为此,我需要将值转换为 int,以便在键为年龄时进行比较。

以上文档是针对此问题的一个非常具体的示例。

非常感谢您的帮助。

谢谢!

您可以为此使用脚本

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.

中启用动态脚本

此外,我想您可以通过重构文档结构并为年龄字段应用适当的映射来获得更好的查询性能。