SQL IN equivalent with ElasticSearch

本文关键字:ElasticSearch with equivalent IN SQL | 更新日期: 2023-09-27 18:30:29

>我正在尝试弄清楚如何使用ElasticSearch执行等效的SQL IN子句。

下面的查询将起作用,但是当我将其更改为"查询"时:["1589","1590"]则不起作用。我相信它正在对同一字段的这两个值执行 AND,我希望它执行 OR 或 WHERE IN。

工程

{
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "userId": {
              "query": ["1589"]
            }
          }
        }
      ]
    }
  }
}

失败

{
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "userId": {
              "query": ["1589", "1590"]
            }
          }
        }
      ]
    }
  }
}

SQL IN equivalent with ElasticSearch

那么下面应该可以工作 -

{
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "userId": {
              "query": ["1589"]
            }
          }
        },
        {
          "match": {
            "userId": {
              "query": ["1590"]
            }
          }
        }
      ]
    }
  }
}

记住 must 是类似 AND 的东西,应该可以(单独)用来获得类似 OR 的东西

您没有提到您使用哪个版本,1.7 具有术语过滤器,在 2.x 中它被术语查询所取代。似乎 userId 将被not_analyzed并且匹配是"预期"用于分析字段。它们支持组合术语数组的各种方式,至少过滤器支持。