Поддерживает ли elasticsearch SQL как условия ИЛИ

Например, в SQL я бы написал (a AND b) OR (c AND d). Но не могу найти прямого аналога в elasticsearch.

0
0
15
2

Ответы 2

Да, это можно сделать через bool/should, вот так:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "filter": [
              {
                "match": {
                  "field1": "foo"
                }
              },
              {
                "match": {
                  "field2": "bar"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "filter": [
              {
                "match": {
                  "field1": "baz"
                }
              },
              {
                "match": {
                  "field2": "fox"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

Удачи с этим?

Val 01.04.2021 14:05

В Elasticsearch, should эквивалентен OR в SQL, а must эквивалентен AND. Таким образом, следующий запрос эквивалентен вашему SQL-запросу и даст первые 10 результатов.

(A=a AND B=b) OR (C=c AND D=d)

GET /<indexName>/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "bool": {
              "must": [
                {
                  "match": {
                    "A": "a"
                  }
                },
                {
                  "match": {
                    "B": "b"
                  }
                }
              ]
            }
          }
        },
        {
          "match": {
            "bool": {
              "must": [
                {
                  "match": {
                    "C": "c"
                  }
                },
                {
                  "match": {
                    "D": "d"
                  }
                }
              ]
            }
          }
        }
      ]
    }
  },
  "from": 0,
  "size": 10,
  "sort": [],
  "aggs": {}
}

Ссылка: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

Другие вопросы по теме