elasticsearch - 搜索超过2位小数的数字

时间:2016-04-18 21:22:17

标签: elasticsearch

如何在elasticsearch中搜索具有值小于2位小数的数字字段的文档?

我的映射如下:

{
   "items": {
      "mappings": {
         "item": {
            "properties": {
               "id": {
                  "type": "long"
               },
               "item": {
                  "type": "string"
               },
               "price": {
                  "type": "double"
               }
            }
         }
      }
   }
}

示例文档如下:

{
  "id": 1,
  "item": "abc",
  "price": 1234.567
}

当我尝试以下查询时,我得到NumberFormatException: 获取项目/ _search

{
    "query": {
        "bool": {
            "must": {
                "regexp": {"price": "[0-9]*\\.[0-9]{3,}"}
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

不幸的是,你不能在数字字段上使用正则表达式。

一种可能的方法是使用script查询/过滤器,如下所示。它的作用只是检查一段时间后可用的仓位数,如果仓位数量大于或等于2,则返回true。

{
  "query": {
    "bool": {
      "must": {
        "script": {
          "script": "def str = doc.price.value.toString(); def len = str.length(); def dot = str.indexOf('.'); return len - (dot+1) >= 2"
        }
      }
    }
  }
}