elasticsearch中的嵌套选择查询

时间:2015-07-24 16:09:03

标签: sql select elasticsearch

我必须在elasticsearch中转换以下查询:

select * from index where observable not in (select observable from index where tags = 'whitelist')

我读到我应该在非过滤器中使用过滤器,但我不明白该怎么做。 谁能帮我? 感谢

编辑:

我必须得到除了那些带有“白名单”标签的所有标签,但我还要检查白名单中是否包含黑名单元素。

1 个答案:

答案 0 :(得分:0)

您的SQL查询可以简化为:

select * from index where tags not in ('whitelist')

结果"对应" ES查询将是

curl -XPOST localhost:9200/index/_search -d '{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must_not": {
            "terms": {
              "tags": [
                "whitelist"
              ]
            }
          }
        }
      }
    }
  }
}'

或其他使用not过滤器而不是bool/must_not

curl -XPOST localhost:9200/index/_search -d '{
  "query": {
    "filtered": {
      "filter": {
        "not": {
          "terms": {
            "tags": [
              "whitelist"
            ]
          }
        }
      }
    }
  }
}'