gpt4 book ai didi

javascript - Elasticsearch返回的结果大于范围内指定的结果

转载 作者:行者123 更新时间:2023-12-03 02:31:51 25 4
gpt4 key购买 nike

我在 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(),}}
    },并返回结果!

  • 我在做什么错?

    最佳答案

    首先,删除两个 bool(boolean) 对象的不必要的嵌套,尝试将所有子句放在相同的“ bool(boolean) ”字段中,如下所示。

    请记住,使用必须,文档中必须包含您要进行比较的字词才能包含在结果中;如果满足条件,则使用应该匹配只会提高得分,因此从某种意义上说必须就像AND 应该类似于OR

    在您的示例中,将过滤器从“应该”更改为“必须”必须使查询不返回任何内容,可能是因为您没有同时具有所需日期和价格的任何元素,或者可能是 bool(boolean) 嵌套问题。

    试试这个:

    {
    "query": {
    "bool": {
    "must": [{
    "range": {
    "sale_date": {
    "gt": Date.now()
    }
    }
    },
    {
    "range": {
    "price": {
    "gt": 1,
    "lte": 800
    }
    }
    }],
    "filter": {
    "term": {
    "sold_out": false
    },
    }
    }
    },
    "from": 10,
    "size": 200
    }

    这只会获取价格为800且sale_date gt Date.now()的元素。

    关于javascript - Elasticsearch返回的结果大于范围内指定的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59789772/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com