首页 > 解决方案 > 单个应该查询块中的多个条件

问题描述

我正在连接一个我无法控制的 API,并希望提取所有符合特定条件的配方条目。在大多数情况下,这是一个简单的“值是否等于 N”,但是对于其中一个标准,我还必须检查另一个值是否大于 0。

这段代码工作得很好:

should: [
  { match: { 'ItemResult.ItemAction.Type': 853 } },
  { match: { 'ItemResult.ItemAction.Type': 1013 } },
  { match: { 'ItemResult.ItemAction.Type': 1322 } },
  { match: { 'ItemResult.ItemAction.Type': 5845 } }
]

它为我提供了所有配方条目,'ItemResult.ItemAction.Type它们如预期的那样是 853、1013、1322 或 5845。should问题来自我的数组的这个新的更复杂的条件:

range: {
  'ItemResult.ItemAction.Type': { gte: 5100, lte: 5300 },
  'ItemResult.ItemAction.Data0': { gt: 0 }
}, ...

每个单独的范围属性都可以正常工作,但是当两者像上面一样组合时,我自然会收到以下错误:

"reason":"[range] 查询不支持多个字段

有没有一种方法可以让我在同一个查询中愉快地考虑两个范围而不影响其他ItemResult.ItemAction.Type值?

显然,我可以再次连接到 API 以执行更复杂的标准搜索,但我想知道我是否可以在一次调用中完成所有操作。

标签: node.jselasticsearch

解决方案


{
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "ItemResult.ItemAction.Type": {
                            "gte": 5100,
                            "lte": 5300
                        }
                    }
                },
                {
                    "range": {
                        "ItemResult.ItemAction.Data0": {
                            "gt": 0
                        }
                    }
                }
            ]
        }
    }
}

Rangefrom elasticsearch 不支持多个字段,但您可以使用此查询来获得多个range条件。


推荐阅读