我是Elasticsearch的新手,这让我发疯了。这些文档非常无益,因此大约6个小时后我来到了令人惊叹的SO社区。
我有一个查询,它在一个大型的95%完成的网站上实现,所以我不能在这一点上重写。
我需要添加一项检查以确保userID不为null。在SQL中,这需要几秒钟,但我有一个非常大的查询,它给了我疯狂无益的错误消息或不工作。我尝试过重组,将“存在”转移到现有的“和”中,它根本不起作用。
这就是我所拥有的:
GET _search
{
"from": 0,
"size": 30,
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"and": [
{
"bool": {
"must": [
{
"exists" : { "field" : "userID" }
}
]
}
},{
"term": {
"property.rental": false
}
}, {
"term": {
"property.status": 100
}
}, {
"term": {
"property.showOnHomepage": true
}
}
]
}
}
},
"sort": {
"_script": {
"script": "Math.random()",
"type": "number",
"params": {},
"order": "asc"
}
},
"aggregations": {
"min_price": {
"min": {
"field": "basePrice"
}
},
"max_price": {
"max": {
"field": "basePrice"
}
},
"avg_price": {
"avg": {
"field": "basePrice"
}
}
},
"filter": {
"range": {
"property.price": {
"lte": 1000000000
}
}
}
}
这给出了以下结果:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
},
"aggregations": {
"min_price": {
"value": null
},
"max_price": {
"value": null
},
"avg_price": {
"value": null
}
}
}
我根本不明白将
放在哪里 "exists" : { "field" : "userID" }
为了过滤掉userID的null属性。
任何帮助都会很棒。