ElasticSearch 多个查询合二为一

ElasticSearch multiple queries in one

我正在使用 ElasticSearch,我想进行查询。

我有不同的模块:['a', 'b', 'c', 'd']。 其中 ab 有一个额外的值 (companyId) 我需要过滤所有模块的文本,但我需要过滤 companyId 只是为了 ab 不适用于模块 cd.

这看起来像这样:

SELECT * FROM my_table WHERE (modules in ('a', 'b') and companyId='myid') OR (modules in ('b', 'c'))

但是我有这个:

client.search({
      index: INDEX,
      type: TYPE,
      body: {
        query: {
          bool: {
            must: {
              match: { text: 'mytext' },
            },
            filter: [
              { terms: { module: ['a', 'b', 'c', 'd'] } },
              { term: { companyId: 'myid' } },
            ]
          }
        }
      }
    });

如有帮助,非常感谢。

以下查询是您要查找的内容。我已经在 filter

中实现了 OR 运算符,即 should
{
  "query": {
    "bool": {
      "must": {
        "match": { "text": "mytext" }
      },
      "filter": [
       {
          "bool": {
            "should": [
              {
                "bool": {
                  "must": [
                      { "match": { "module": "a" }},
                      { "match": { "companyId": "1" }}
                  ]
                }
              },
              {
                "bool": {
                  "must": [
                      { "match": { "module": "b" }},
                      { "match": { "companyId": "1" }}
                   ]
                }
              },
              {
                "bool": {
                  "must": {
                    "match": { "module": "c" }
                  }
                }
              },
              {
                "bool": {
                  "must": {
                    "match": { "module": "d" }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}