【问题标题】:Elasticsearch returns results greater than specified in rangeElasticsearch 返回的结果大于指定的范围
【发布时间】:2020-05-04 11:37:25
【问题描述】:

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

我想查找价格在 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 中存储为 long

的价格字段

我想试试:

  • 使用 from: to: 得到相同的结果
  • 在过滤器中将“应该”更改为“必须”,它会返回空结果
  • 从查询中删除 { "range": { "sale_date": { "gt": Date.now(), } } } 并返回 正确 结果!

我做错了什么?

【问题讨论】:

  • 您想要所有价格小于或等于 800 且 sale_date 大于 Date.now 的文档?您使用的是什么版本的弹性搜索?提问时请尽量提供尽可能多的信息。

标签: javascript node.js mongodb elasticsearch


【解决方案1】:

首先删除两个bool对象的不必要嵌套,尝试将所有子句都放在同一个“bool”字段中。

请记住,使用 必须 文档必须包含您要进行比较的术语才能包含在结果中,使用 should 匹配只会提高分数,如果条件满足,那么在某种意义上must就像AND并且应该类似于OR

在您的示例中,将过滤器从 should 更改为 must 使查询不返回任何内容,可能是因为您没有任何同时具有所需日期和价格的元素,或者问题出在 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 和 sale_date gt Date.now() 的元素。

【讨论】:

    【解决方案2】:

    将 Date().now() 更改为 "gt": "now/d"。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多