Elasticsearch combining filters

256
12 декабря 2017, 19:07

Здраствуйте, я пытаюсь создать QueryBuilder По аналагии Mysql

WHERE (domaindId AND ((userId AND date_rage) or (userId AND date_rage) or ...)

  DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
    formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
    BoolQueryBuilder queryBuilder = QueryBuilders
            .boolQuery()
            .must(termQuery(DOMAIN_ID, request.getDomainId()));
    for (UserActivityPeriod u : request.getUserPeriods()) {
        queryBuilder
                .must(QueryBuilders.boolQuery()
                        .should(QueryBuilders.boolQuery()
                                .must(termQuery(USER_ID, u.getUserId()))
                                .must(rangeQuery(DATE)
                                        .gte(formatter.format(u.getPeriod().getFromDate()))
                                        .lte(formatter.format(u.getPeriod().getEnd()))
                                        .format(DATE_FORMAT))));

}

Вот результат QueryBuilder

{
  "bool" : {
    "must" : [
      {
        "term" : {
          "domainId" : {
            "value" : 7,
            "boost" : 1.0
          }
        }
      },
      {
        "bool" : {
          "should" : [
            {
              "bool" : {
                "must" : [
                  {
                    "range" : {
                      "date" : {
                        "from" : "2017-12-05",
                        "to" : "2017-12-05",
                        "include_lower" : true,
                        "include_upper" : true,
                        "format" : "yyyy-MM-dd",
                        "boost" : 1.0
                      }
                    }
                  }
                ],
                "disable_coord" : false,
                "adjust_pure_negative" : true,
                "boost" : 1.0
              }
            }
          ],
          "disable_coord" : false,
          "adjust_pure_negative" : true,
          "boost" : 1.0
        }
      },
      {
        "bool" : {
          "should" : [
            {
              "bool" : {
                "must" : [
                  {
                    "range" : {
                      "date" : {
                        "from" : "2017-12-06",
                        "to" : "2017-12-06",
                        "include_lower" : true,
                        "include_upper" : true,
                        "format" : "yyyy-MM-dd",
                        "boost" : 1.0
                      }
                    }
                  }
                ],
                "disable_coord" : false,
                "adjust_pure_negative" : true,
                "boost" : 1.0
              }
            }
          ],
          "disable_coord" : false,
          "adjust_pure_negative" : true,
          "boost" : 1.0
        }
      }
    ],
    "disable_coord" : false,
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}

Запрос не выполняеться если не обернуть его в обьект query.

READ ALSO
StreamCorruptedException при Сериализации

StreamCorruptedException при Сериализации

Есть класс(Example) который реализует интерфейс Serializable

180
Настройка log4j2 для потоков

Настройка log4j2 для потоков

Есть класс Test, потомок ThreadКак мне настроить log4j2 что бы для каждого потока Test создавался свой лог файл

229
Как правильно передать координаты в Google Maps?

Как правильно передать координаты в Google Maps?

Пытаюсь геокодировать адрес переменной adr в координаты с долготой и шириной и отобразить метку на картеЗапускаю приложение

247
как инициализировать 5-ти мерный массив?

как инициализировать 5-ти мерный массив?

Привет! Есть простой массив Object[] arr = new int[50] заполненный некими значениями, также есть другой массив Object[][][][][] fiveDArr, правда он 5-ти мерный, нужно...

259