ElasticSearch несколько запросов в одном - PullRequest
0 голосов
/ 17 октября 2018

Я использую ElasticSearch и хочу сделать запрос.

У меня есть разные модули: ['a', 'b', 'c', 'd'].где a и b имеют дополнительное значение (companyId) Мне нужно отфильтровать текст всех модулей, но мне нужно отфильтровать companyId только для a и b не для модулей c и d.

Это будет выглядеть примерно так:

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' } },
            ]
          }
        }
      }
    });

Спасибомного, если вы можете помочь.

1 Ответ

0 голосов
/ 17 октября 2018

Следующий запрос - это то, что вы ищете.Я реализовал оператор OR, т.е. should внутри filter

{
  "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" }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
...