Elasticsearch DSL Query для отображения элементов на основе значения поля в нескольких документах - PullRequest
0 голосов
/ 08 января 2020

Как мне выполнить запрос на выборку, подобный приведенному ниже, в поиске elasti c, предполагая, что каждая строка в таблице является отдельным документом?

CREATE TABLE orders (
  `orderid` varchar,
  `status` varchar
);

insert into orders values('abc','PENDING');
insert into orders values('abc','SENT');
insert into orders values('xyz','PENDING');

select * from orders where status='PENDING' and orderid not in (select orderid from orders where status='SENT')

1 Ответ

0 голосов
/ 08 января 2020

Из запроса SQL я понимаю, что вам нужны все записи, которые имеют статус = "В ОЖИДАНИИ". Не уверен, зачем вам здесь нужно условие AND для исключения заказов со статусом = "SENT", так как status = "pending" получит необходимые строки.

Теперь перейдем к запросу elasti c, предполагая, что поле статуса - это поле ключевого слова, вы можете использовать запросы bool для получения документов со статусом - «в ожидании». Примерно так:

{
 "query": {
   "bool": {
      "must": [
         {
           "term":{
             "status.keyword":"PENDING"
           }
         }
      ]
   }
 }
}

В случае, если вам нужно найти все документы со статусом в ожидании и отправить оба ( И условие) добавьте еще один запрос запроса в предложении must выше. если статусы нужно редактировать OR, поместите термин «запросы» в предложение must (внутри запроса bool) и установите для параметра Minimum_should_match значение 1. Если вам нужны все значения в заданном временном интервале, добавьте фильтр в bool с помощью запрос временного диапазона внутри. Надеюсь, это поможет.

...