Получить элементы, чьи максимальные значения вложенного поля меньше значения параметра - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующее сопоставление вasticsearch:

"mappings": {
  "company": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "employee": {
        "type": "object",
        "properties": {
          "age": {
            "type": "long"
          }
        }
      }
    }
  }
}

Я хотел бы знать, возможно ли получить все компании, чьи максимальные значения возраста сотрудников меньше 30. В SQL мне просто нужновыберите компанию, присоединившись к сотруднику и группе по идентификатору компании, и укажите условие where, максимальное значение для которого не превышает 30.

1 Ответ

0 голосов
/ 25 июня 2018

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

GET yourindex/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"range": {
          "employee.age": {
            "gt": 30
          }
        }}
      ]
    }
  }
}

Стоит отметить, что если вы когда-нибудь захотите выполнить поиск, объединяющий поля сотрудников, вы можете столкнуться с проблемами.Например, если вы хотите найти все компании, в которых есть сотрудник с age < 30 AND gender=MALE, эта модель не работает.По умолчанию ElasticSearch обрабатывает все поля как независимые.Это означает, что запрос будет возвращать любые компании, в которых есть хотя бы один сотрудник MALE и один сотрудник в возрасте до 30 лет.Вы не сможете сказать, что они должны быть одним и тем же человекомЕсли вам нужно выполнить эти типы запросов, вам нужно будет просмотреть вложенных отображений и запросов, что немного изменит запрос выше.

Подробности: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

...