Диапазон конструктора клиентских запросов Elasticsearch Java Jest с логическим запросом

Мне нужно сделать запрос Elasticsearch с помощью клиента Jest, чтобы сопоставить некоторые термины и дату с запросом диапазона. Поэтому мне нужно выполнить логический запрос с диапазонным запросом, используя Jest QueryBuilder, чтобы получить такой запрос:

{
"query": {
    "range": {
        "gte": "begindate",
        "lte": "enddate"
    },
    "bool": {
        "must": [
            {
                "terms": {
                    "field1": [
                        55,
                        99
                    ]
                }
            },
            {
                "terms": {
                    "field2": [
                        450
                    ]
                }
            },
            {
                "terms": {
                    "field3": [
                        11
                    ]
                }
            }
        ]
    }
}

}

Для этого я использовал queryBuilder вот так:

Builder search = null;
Search buildedSearch = null;
SearchResult result = null;

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder qb = QueryBuilders.boolQuery();

if (field1 != null) {
    qb.must(QueryBuilders.termsQuery("field1", field1));
}

if (field2 != null) {
    qb.must(QueryBuilders.termsQuery("field2", field2));
}

if (field3 != null) {
    qb.must(QueryBuilders.termsQuery("field3", field3));
}

String query = searchSourceBuilder.query(qb).toString();

if (field != null) {
    search = new Search.Builder(query).addIndex(index).addType(type);
    if (beginIndex != -1) {
        search.setParameter(Parameters.FROM, beginIndex);
    }

    if (endIndex != -1) {
        search.setParameter(Parameters.SIZE, endIndex);
    }

    buildedSearch = search.build();
}

try {
    result = client.execute(buildedSearch);
} catch (IOException e) {
    LOGGER.info("Can't found result");
}

Как я могу добавить диапазонный запрос в конструктор поиска, потому что мой объект qb уже имеет boolquery, и я не могу добавить к нему диапазонный запрос.


person fmdaboville    schedule 05.04.2018    source источник


Ответы (2)


Попробуй это.

QueryBuilder rangeQuery = QueryBuilders
.rangeQuery("field")
.from("2016-01-01||/D")
.to("2017-01-01||/D")
.includeLower(true)
.includeUpper(false);


QueryBuilder termsQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.termsQuery("field1","12"))
.must(QueryBuilders.termQuery("field2", "abc"))
.must(QueryBuilders.termQuery("field3", "def"));


QueryBuilder qb = QueryBuilders
.boolQuery()
.should(rangeQuery)
.should(termsQuery);
person Waqas Ahmed    schedule 05.04.2018

Вам нужен запрос диапазона, как показано ниже:

QueryBuilder rangeQ = QueryBuilders
                    .rangeQuery("begindate")
                    .from(5)
                    .to(10);

затем объедините два запроса с должен:

QueryBuilder qb = QueryBuilders
                    .boolQuery()
                    .should(rangeQ)
                    .should(boolQ);

Взгляните на этот пост: Как создать динамический запрос в java API? для получения дополнительной информации.

person aleroot    schedule 05.04.2018