можно сделать запрос ElasticSearch для поля массива, что все его элементы должны удовлетворять некоторому условию - PullRequest
0 голосов
/ 06 февраля 2020

Я использую ElasticSearch и у меня есть поле массива чисел, как показано ниже.

{
  income: [200, 300, 400]
}

Мне нужно написать запрос, чтобы найти документы, в которых все элементы их дохода превышают определенное значение. например, если условие

> 250

, то к документу выше не следует обращаться, поскольку 200 меньше 250. Но если условие

> 150

, то документ должен быть вернулся.

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете сделать это с помощью скриптового запроса, который перебирает поле массива и проверяет желаемое условие. В приведенном выше случае следующим будет queryDsl

GET testample/_search
{
  "query": {
    "script": {
      "script": {
        "source": " boolean test = false; for (inc in doc['income']) { if(params.income<=inc) { test=true; } else { test=false; break;} } return test;",
        "params": {
          "income": 150
        }
      }
    }
  }
}

В принципе, вы можете выполнить любой код в разделе скрипта. Вышеупомянутый запрос делает то, что он принимает пользовательский ввод в качестве параметра, а затем проверяет, меньше ли он всех элементов в массиве, и если да, то do c оценивается как true и, следовательно, возвращается как ответ на запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...