# Java client, random query generates data too large exception

**URL:** <https://discuss.elastic.co/t/java-client-random-query-generates-data-too-large-exception/53765>\
**Category:** Elasticsearch\
**Created:** [June 23, 2016, 10:09am UTC](https://discuss.elastic.co/t/java-client-random-query-generates-data-too-large-exception/53765 "2016-06-23T10:09:58Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![oserban](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/oserban/32/10500_2.png) [@oserban](https://discuss.elastic.co/u/oserban)\
**Post date:** [June 23, 2016, 10:09am UTC](https://discuss.elastic.co/t/java-client-random-query-generates-data-too-large-exception/53765/1 "2016-06-23T10:09:58Z")

</div>

I have the following query which works well with a REST client and returns 3 random results, which is great.

```auto
{
  "size":3,
  "query": {
    "function_score": {
      "functions": [
        {
          "filter": { "terms": { "text": ["flu", "influenza"] }},
          "weight": 1
        },
        {
          "random_score": { 
            "seed": "1331" 
          }
        }
      ]
    }
  }
}

```

Now I try to do the same in Java:

```auto
FunctionScoreQueryBuilder functionScoreQueryBuilder = new FunctionScoreQueryBuilder();
functionScoreQueryBuilder.add(new TermsQueryBuilder(samplingField, terms), new WeightBuilder().setWeight(1));
functionScoreQueryBuilder.add(new RandomScoreFunctionBuilder());

SearchRequestBuilder builder = client.prepareSearch(collection).setTypes(collection).setSize(3);
builder.setQuery(functionScoreQueryBuilder);
builder.addField("text");

```

And this query fails with a Data too large exception. I had a look into the code and it seems that the Java client is trying to load all the data into memory and then try to apply the size restriction. Is there any work around that?

---

<div class="post-metadata">

**Author:** ![oserban](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/oserban/32/10500_2.png) [@oserban](https://discuss.elastic.co/u/oserban)\
**Post date:** [June 23, 2016, 11:01am UTC](https://discuss.elastic.co/t/java-client-random-query-generates-data-too-large-exception/53765/2 "2016-06-23T11:01:44Z")

</div>

Just noticed that I was executing the queries on two different indexes, one smaller than the other. It is in fact a server side exception, so I am looking at other approaches to randomize the search.

---

<div class="post-metadata">

**Author:** ![oserban](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/oserban/32/10500_2.png) [@oserban](https://discuss.elastic.co/u/oserban)\
**Post date:** [June 23, 2016, 11:22am UTC](https://discuss.elastic.co/t/java-client-random-query-generates-data-too-large-exception/53765/3 "2016-06-23T11:22:14Z")

</div>

In case you look for a solution for picking a random sample of your data, the random sorting solution works. Here is my Java code.

builder.addSort(new ScriptSortBuilder(new Script("Math.random()"), "number").order(SortOrder.ASC));

You can use this with any query. Please be sure that you enable groovy scripting for inline/search.

---

<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 5, 2017, 10:41pm UTC](https://discuss.elastic.co/t/java-client-random-query-generates-data-too-large-exception/53765/4 "2017-07-05T22:41:07Z")

</div>


