# Elasticsearch 8.8 dynamic search request query

**URL:** <https://discuss.elastic.co/t/elasticsearch-8-8-dynamic-search-request-query/336994>\
**Category:** Elasticsearch\
**Tags:** language-clients\
**Created:** [June 27, 2023, 1:11pm UTC](https://discuss.elastic.co/t/elasticsearch-8-8-dynamic-search-request-query/336994 "2023-06-27T13:11:51Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![tcpeiris](https://avatars.discourse-cdn.com/v4/letter/t/54ee81/32.png) [@tcpeiris](https://discuss.elastic.co/u/tcpeiris)\
**Post date:** [June 27, 2023, 1:11pm UTC](https://discuss.elastic.co/t/elasticsearch-8-8-dynamic-search-request-query/336994/1 "2023-06-27T13:11:51Z")

</div>

```auto
SearchResponse<ObjectNode> searchResponse = elasticsearchClient.search(req -> req.index(index)
                                    .from((pageNumber - 1) * pageSize)
                                    .size(pageSize)
                                    .source(SourceConfig.of(s -> s.filter(f -> f.includes(queryDto.getQuery().getSelect()))))
                                    .query(subQuery -> subQuery.bool(bool -> bool
                                            .must(termsQueryMustList)
                                            .mustNot(termsQueryMustNotList)))
                                    .sort(sortOptions),        
                                    ObjectNode.class);   

```

How can I build the search request query dynamically by adding .sort() or .from() or .size() only if sortOptions and pageSize are available.

---

<div class="post-metadata">

**Author:** ![swallez](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/swallez/32/11972_2.png) [@swallez](https://discuss.elastic.co/u/swallez)\
**Post date:** [June 30, 2023, 12:51pm UTC](https://discuss.elastic.co/t/elasticsearch-8-8-dynamic-search-request-query/336994/2 "2023-06-30T12:51:31Z")

</div>

The builder lambda functions don't have to be simple expressions and can contain arbitrary logic. The code below should be what you're looking for:

```java
SearchResponse<ObjectNode> searchResponse = elasticsearchClient.search(req -> {
    req.index(index)
        .source(SourceConfig.of(s -> s
            .filter(f -> f
                .includes(queryDto.getQuery().getSelect())
            )
        ))
        .query(subQuery -> subQuery.bool(bool -> bool
            .must(termsQueryMustList)
            .mustNot(termsQueryMustNotList))
        );
    
        if (pageSize > 0) {
            req.from((pageNumber - 1) * pageSize).size(pageSize);
        }
        if (sortOptions != null) {
            req.sort(sortOptions);
        }
        return req;
    },
    ObjectNode.class
);

```

---

<div class="post-metadata">

**Author:** ![tcpeiris](https://avatars.discourse-cdn.com/v4/letter/t/54ee81/32.png) [@tcpeiris](https://discuss.elastic.co/u/tcpeiris)\
**Post date:** [June 30, 2023, 5:42pm UTC](https://discuss.elastic.co/t/elasticsearch-8-8-dynamic-search-request-query/336994/3 "2023-06-30T17:42:55Z")

</div>

Thank you very much @swallez for your answer. Really appreciate your support.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 28, 2023, 5:43pm UTC](https://discuss.elastic.co/t/elasticsearch-8-8-dynamic-search-request-query/336994/4 "2023-07-28T17:43:19Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
