Как переписать запрос дляasticsearch - PullRequest
0 голосов
/ 09 ноября 2018

У меня SQL-запрос

SELECT * FROM requests WHERE order_type = 'buyer' AND (plantations_id = 402 OR plantations_id = 460)

Мой запрос на эластичность

GET /requests/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "order_type": "buyer"
          }
        },
        {
          "bool": {
            "should": [
              {
                "terms": {
                  "plantations_id": [402, 460]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

Но в наборе результатов есть только элементы с "plantations_id": "460". Я немного озадачен, как правильно переписать свой исходный запрос.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вам не нужно предложение bool/should, правильный запрос:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "order_type": "buyer"
          }
        },
        {
          "terms": {
            "plantations_id": [
              402,
              460
            ]
          }
        }
      ]
    }
  }
}

Или лучше, вместо этого переместите фильтр terms на bool/filter, так как он не будет участвовать в подсчете очков:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "order_type": "buyer"
          }
        }
      ],
      "filter": [
        {
          "terms": {
            "plantations_id": [
              402,
              460
            ]
          }
        }
      ]
    }
  }
}
0 голосов
/ 09 ноября 2018

Обновите ваш запрос, как показано ниже

{ 
  "query": {
   "bool": { 
    "must": [
      { "match": { "order_type": "buyer" } },
      { "bool": {
        "should": [
        {
           "terms": {
             "plantations_id": [402, 460]
           }
         }
       ]
      }
     }
    ]
   }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...