【问题标题】:Multiple bool clauses in elasticsearch filter/queryelasticsearch过滤器/查询中的多个布尔子句
【发布时间】:2017-10-31 23:07:09
【问题描述】:

我应该如何将此 SQL 查询转换为 elasticsearch 查询?

SELECT * FROM myTable WHERE (id = 99 AND isonline <> 1) OR (id = 98 AND isonline <> 0)

如何进行具有多个布尔过滤器的查询? (奖金也将展示如何在 NEST 中做到这一点)

我想出的弹性查询不起作用,因为它包含重复的对象键。

{
    "size": 1000,
    "query": {
        "match_all": {}
    },
    "filter": {
        "bool": {
            "must": [
                {
                    "term": {
                        "id": 99
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "isonline": true
                    }
                }
            ]
        },
        "bool": {
            "must": [
                {
                    "term": {
                        "id": 98
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "isonline": false
                    }
                }
            ]
        }        
    }
}

elasticsearch 1.7 版

【问题讨论】:

  • 是我还是你的WHERE 声明没有意义? (id = 99 AND isonline &lt;&gt; 1) AND (id = 98 AND isonline &lt;&gt; 0) id 是 99 和 98...
  • @AndreiStefan 很抱歉你是对的。我已经将查询从使用“AND”编辑为使用“OR”,这就是我想要做的。基本上我想匹配 ID 和在线状态。对于我要查找的每个项目,我都会有这些条件。
  • 呵呵,现在说得通了。我已经更新了我的答案。

标签: elasticsearch nest


【解决方案1】:
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "term": {
                  "id": 99
                }
              },
              {
                "term": {
                  "isonline": false
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "term": {
                  "id": 98
                }
              },
              {
                "term": {
                  "isonline": true
                }
              }
            ]
          }
        }
      ]
    }
  }
}

【讨论】:

  • 查询返回 0 个命中。如果我删除其中一个内部布尔条件,那么我至少会得到 1 个结果。但是如果在 must 中有超过 1 个 bool 条件,它就不起作用了。
  • 您能从您的帖子中回答我的问题吗?是我还是你的 WHERE 语句没有意义? (id = 99 AND isonline &lt;&gt; 1) AND (id = 98 AND isonline &lt;&gt; 0) id 既是 99 又是 98……你到底在找什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
相关资源
最近更新 更多