Elasticsearch在查询时转换字段的数据类型

时间:2015-04-03 07:59:29

标签: elasticsearch sense

在使用过滤器查询时,有什么方法可以转换字段的数据类型。 我的场景是我有一个带字段

的文档
customData: {
    "contactCustomFieldMapId":xxxx,
    "contactId":xxxxx,
    "customFieldId":45788,
    "value":"1899",
    "fieldInputTypeId":0
},
{
    "contactCustomFieldMapId":xxxx,
    "contactId":xxxxx,
    "customFieldId":45732,
    "value":"Meet me at noon",
    "fieldInputTypeId":0
},
{
    "contactCustomFieldMapId":xxxx,
    "contactId":xxxxx,
    "customFieldId":23233,
    "value":"233589",
    "fieldInputTypeId":0
}

在上面的字段中,value属性可以是任何数据类型(字符串,数据时间或数字),因为我需要使用范围过滤器(大于,小于)来获取数据。此范围过滤器应与术语过滤器组合使用bool过滤器作为

进行查询
"filter": {
"and": {
  "filters": [
    {
      "bool": {
        "must": [
          {
            "and": {
              "filters": [
                {
                  "term": {
                    "customData.customFieldId": 45788
                  }
                },
                {
                  "range": {
                    "customData.value": {
                      "gt": "1000"
                    }
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}

}

不幸的是,查询使用customData.customFieldId获取所有记录为45788(与现有过滤器类似)。

有什么方法可以将术语过滤器和范围过滤器结合起来。

1 个答案:

答案 0 :(得分:0)

可能查询格式不正确。我用这个:

 {
   "filtered": {
     "filter": {
       "and": [
         { "term": {
                  "customData.customFieldId": 45788
              }
         },
         { "range": {
                 "customData.value": {
                       "gt": "1000"
                     }
               }
         }
       ]
     }
   }
  }