elasticsearch - Elasticsearch:如何在过滤器上下文中编写“OR”子句?
问题描述
我正在寻找与 ES 版本是 6.7 兼容的语法/示例。我看过文档,我没有看到任何例子,而且解释对我来说不够清楚。我已经尝试根据那个编写查询,但我不断收到语法错误。我已经看到了关于 SO 的以下问题,但它们对我没有帮助:
在 bool 查询中过滤 should 的上下文 (Elasticsearch)
它没有任何例子。
我收到语法错误
"type": "parsing_exception",
"reason": "no [query] registered for [filtered]",
"line": 1,
"col": 31
也许它适用于不同版本的 ES。
我所需要的只是一个带有两个“或”条件的简单示例(我的是一个range
和一个term
,但我想这并不重要),我都希望在过滤器上下文中拥有(我不关心分数,也不关心文本搜索)。
如果您真的需要它,我可以展示我的尝试(需要在发布之前从中删除一些“敏感”(duh)部分),但它们会给出解析/语法错误,所以我认为它们没有任何意义。我知道那些没有表现出任何努力的问题被认为对 SO 不利,但我没有看到任何逻辑来显示甚至没有成功解析的尝试,任何示例都可以帮助我理解语法。
解决方案
我有一个类似的场景(甚至是range
andmatch
过滤器),还有一个嵌套级别,两个条件是“或”(如您的情况)和另一个条件是逻辑“与”其结果。正如@Pierre-Nicolas Mougel 在另一个答案中所建议的那样,我在bool
子句周围多了一层嵌套should
子句。
{
"_source": [
"my_field"
],
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"range": {
"start": {
"gt": "1558878457851",
"lt": "1557998559147"
}
}
},
{
"range": {
"stop": {
"gt": "1558898457851",
"lt": "1558899559147"
}
}
}
]
}
},
{
"match": {
"my_id": "<My_Id>"
}
}
],
"must_not": []
}
}
}
},
"from": 0,
"size": -1,
"sort": [],
"aggs": {}
}
我在文档中读到minimum_should_match也可以用于强制过滤上下文。如果此查询不起作用,这可能会对您有所帮助。
推荐阅读
- javascript - 将 javascript 数组传递给 canvasjs(图表)脚本
- arduino - 将 Arduino MKR NBIoT 1500 板连接并添加到云服务器
- javascript - 如何检查未插入表中的重复值?
- node.js - 在 node.js 中构建 hmac sha256 哈希算法
- python - Fortran DMOD 与 Python numpy.remainder
- swift - SwiftUI - 调用 UUID().uuidString id 时出错
- firebase - 我在 VueJS 中自动保存数据时遇到问题,当我更改当前注释时自动保存没有完成
- javascript - 丢失后退按钮 React Native Navigation
- jmeter - JMETER:需要将 CSV 文件中的所有条目发送到“一个”请求中的 HTTP 请求正文
- nativescript - 为禁用的 RadListView 滑动操作设置样式