单个应查询块中的多个条件

时间:2019-05-29 15:17:17

标签: node.js elasticsearch

我迷上了无法控制的API,并希望提取与某些条件匹配的所有食谱条目。在大多数情况下,这是一个简单的'does值等于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 }
}, ...

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

  

“原因”:“ [范围]查询不支持多个字段

有没有办法让我在同一查询中同时考虑两个范围而又不影响其他ItemResult.ItemAction.Type值?

很明显,我可以第二次连接到API来执行更复杂的条件搜索,但是我想知道是否可以在一次调用中完成所有操作。

1 个答案:

答案 0 :(得分:3)

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

来自Elasticsearch的

Range不支持多个字段,但是您可以将此查询用于具有多个range条件。