Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Elasticsearch返回的结果大于范围中指定的值_Javascript_Node.js_Mongodb_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Javascript,Node.js,Mongodb,elasticsearch" /> elasticsearch,Javascript,Node.js,Mongodb,elasticsearch" />

Javascript Elasticsearch返回的结果大于范围中指定的值

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"

我正在使用Elasticsearch(版本:6.8.4)和MongoDB(4.0.3)

我想查找价格介于1和800之间且销售日期大于日期的所有文档。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中存储的价格字段为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版本是什么?在提问时,请尽量提供更多信息。