[英]Elasticsearch returns results greater than specified in range
我將Elasticsearch (版本:6.8.4)與MongoDB (4.0.3)一起使用
我想找到價格在 1 到 800 之間且 sale_date 大於 Date.now() 的所有文檔,但我的查詢有問題:
{
"query": {
"bool": {
"must": [],
"filter": {
"term": {
"sold_out": false
},
"bool": {
"should": [
{
"range": {
"sale_date": {
"gt": Date.now()
}
}
},
{
"range": {
"price": {
"gt": 1,
"lte": 800
}
}
}
]
}
}
}
},
"from": 10,
"size": 200
}
它的查詢返回我的結果,其中一些產品的價格大於 800
價格字段存儲在Elasticsearch只要
我想試試:
我做錯了什么?
首先刪除兩個 bool 對象的不必要嵌套,嘗試像這樣將所有子句放在同一個“bool”字段中。
記住 with must一個文件必須有你正在做比較的術語才能包含在結果中,如果匹配只會提高分數,如果條件滿足,所以在某種意義上must 就像 AND並且應該類似於 OR 。
在您的示例中,將過濾器從 should 更改為 must 使查詢不返回任何內容,這可能是因為您沒有任何包含您想要的日期和價格的元素,或者可能是布爾嵌套的問題。
嘗試這個:
{
"query": {
"bool": {
"must": [{
"range": {
"sale_date": {
"gt": Date.now()
}
}
},
{
"range": {
"price": {
"gt": 1,
"lte": 800
}
}
}],
"filter": {
"term": {
"sold_out": false
},
}
}
},
"from": 10,
"size": 200
}
這只會得到價格為 lte 800 和 sale_date gt Date.now() 的元素。
將 Date().now() 更改為“gt”:“now/d”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.