首页 > 解决方案 > 在 Elasticsearch 查询中组合 OR、AND 和 IN 运算符

问题描述

我对弹性搜索很陌生,我需要准备结合 OR、AND 和 IN 运算符的查询。我想要实现的是在 SQL 中有这样的东西:

SELECT * FROM tableWHERE (field_1 = 'foo' AND field_2 IN(1,2,3) ) OR ('field_1 = 'bar' AND field_2 IN(2, 3, 4) );

我在 PHP 中使用 elastic 并从以下内容开始:

                'query' => [
                    'bool' => [
                        'should' => [
                            [
                                'match' => [
                                    'field_1' => 'foo',
                                ],
                            ],
                            [
                                'match' => [
                                    'field_1' => 'bar',
                                ],
                            ],
                        ],

                    ],
                ],

但是,我无法添加查询参数来获得我想要的结果。你能帮我吗?

标签: phpelasticsearchelasticsearch-php

解决方案


您需要组合bool/must/should查询子句。对于 IN 运算符,您可以在 elasticsearch中使用术语查询

试试下面的查询

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "match": {
                  "field_1": "foo"
                }
              },
              {
                "terms": {
                  "field_2": [
                    1,
                    2,
                    3
                  ]
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "match": {
                  "field_1": "bar"
                }
              },
              {
                "terms": {
                  "field_2": [
                    2,
                    3,
                    4
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
} 

推荐阅读