node.js - 单个应该查询块中的多个条件
问题描述
我正在连接一个我无法控制的 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 以执行更复杂的标准搜索,但我想知道我是否可以在一次调用中完成所有操作。
解决方案
{
"query": {
"bool": {
"must": [
{
"range": {
"ItemResult.ItemAction.Type": {
"gte": 5100,
"lte": 5300
}
}
},
{
"range": {
"ItemResult.ItemAction.Data0": {
"gt": 0
}
}
}
]
}
}
}
Range
from elasticsearch 不支持多个字段,但您可以使用此查询来获得多个range
条件。
推荐阅读
- java - java - keycloak 无法获取用户主体
- javascript - 如何在 pug 元素中调用 javascript 函数
- routing - 多个接口,但只有一个 (eth0) 有效
- spring - 在 Jackson VirtualBeanPropertyWriter 中注入 Spring Bean
- python-3.x - 使用 K-means 将价格分组
- javascript - 消息:“指定的版本无效”
- php - Magento2 Mysql 正在使用完整的 CPU 并一遍又一遍地运行相同的查询
- html - 引导 4 个网格
- ruby - 如何在rspec中的测试类内实例化存根类
- c# - 需要在 c# 控制台中从源代码中提取特定的 url