Javascript Elasticsearch返回的结果大于范围中指定的值
我正在使用Elasticsearch(版本:6.8.4)和MongoDB(4.0.3) 我想查找价格介于1和800之间且销售日期大于日期的所有文档。now(),但我的查询有问题:Javascript Elasticsearch返回的结果大于范围中指定的值,javascript,node.js,mongodb,
elasticsearch,Javascript,Node.js,Mongodb,
elasticsearch,我正在使用Elasticsearch(版本:6.8.4)和MongoDB(4.0.3) 我想查找价格介于1和800之间且销售日期大于日期的所有文档。now(),但我的查询有问题: { "query": { "bool": { "must": [], "filter": { "term": { "sold_out": false }, "bool": { "should"
{
"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中存储的价格字段为long
我在尝试什么:
- 使用from:to:并得到相同的结果
- 将筛选器中的“应该”更改为“必须”,它将返回空结果
- 从查询{“range”:{“sale_date”:{“gt”:date.now(),} }它将返回正确的结果李>
我做错了什么?首先删除两个bool对象的不必要嵌套,尝试将所有子句放在同一个“bool”字段中,如下所示 请记住,使用必须时,文档必须包含您正在进行比较的术语才能包含在结果中,使用应该时,如果满足条件,匹配只会提高分数,因此从某种意义上讲必须类似,并且和应该类似于或 在您的示例中,将过滤器从“应该”更改为“必须”会使查询不返回任何内容,这可能是因为您没有任何同时包含所需日期和价格的元素,也可能是布尔嵌套的问题 试试这个:
{
"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且销售日期为gt date.now()的元素。将日期()更改为“gt”:“now/d”。您想要价格小于或等于800且销售日期大于日期的所有文档。现在?您使用的elasticsearch版本是什么?在提问时,请尽量提供更多信息。