如何在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,}"}
}
}
}
}
答案 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"
}
}
}
}
}