简化ElasticSearch OR查询

时间:2018-05-02 10:20:22

标签: elasticsearch

我想在ElasticSearch中编写一个简单的查询,伪代码看起来像这样:tf.transpose()。这是我可以提出的查询:

WHERE X==A and (Y in (Y1, Y2) or Y is undefined)

我希望这些文件匹配:

GET sales-staging/_search?filter_path=hits.hits._source
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "A": "X"
          }
        }
      ],
      "should": [
        {
          "terms": {
            "B": [
              "Y1", 
              "Y2"
            ]
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "exists": {
                  "field": "C"
                }
              }
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

并且这些不匹配:

{
    "A": "X",
    "B": "Y1"
},
{
    "A": "X"
}

但是,对于这样一个简单的查询来说,这是一个非常大的多行查询,我觉得我错误地使用{ "A": "X", "B": "Y3" }, { "A": "Z", "B": "Y1" }, { "A": "Z" } 参数来编写一个简单的OR查询。我忽视了一种更简单的方式吗?

我看着SO:

在文档页面上:

但也无法找到答案。

0 个答案:

没有答案