Elasticsearch комплексный фильтр

Я использую поиск упругого поиска, чтобы получить какой-то документ, и я хотел бы сделать простое утверждение, как:

if ((a == "1" || b == "2") || (c == "3" && d == "4"))

Я использую первое утверждение ((a == "1" || b == "2")) с этим

$filter ['bool'] ['must'] [] = array (
  'bool' => array (
    'should' => array (
      array (
        'terms' => array (
          'a' => $aName
        ) 
      ),
      array (
        'terms' => array (
          'b' => $bName
        ) 
      ),
    ),           
  ) 
);

Но после того, как я потерялся. Я не знаю, как я могу добавить:

(c == "3" && d == "4")

1 ответ

Посмотрите на вложенные логические фильтры. Для вашего случая я считаю, что что-то вроде этого будет работать:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "should": [
            {
              "bool": {
                "should": [
                  {
                    "term": {
                      "a": 1
                    }
                  },
                  {
                    "bool": {
                      "must": {
                        "term": {
                          "b": 2
                        }
                      }
                    }
                  }
                ]
              }
            },
            {
              "bool": {
                "must": [
                  {
                    "term": {
                      "c": 3
                    }
                  },
                  {
                    "term": {
                      "d": 4
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

Преобразование его обратно в php должно быть легко отсюда.

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