# JSON ordering!? / solved SearchPhaseExecutionException\[Failed to execute phase \[query\_fetch\] issue

**URL:** <https://discuss.elastic.co/t/json-ordering-solved-searchphaseexecutionexception-failed-to-execute-phase-query-fetch-issue/9851>\
**Category:** Elasticsearch\
**Created:** [November 27, 2012, 8:23pm UTC](https://discuss.elastic.co/t/json-ordering-solved-searchphaseexecutionexception-failed-to-execute-phase-query-fetch-issue/9851 "2012-11-27T20:23:46Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![courtenay](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/courtenay/32/1933_2.png) [@courtenay](https://discuss.elastic.co/u/courtenay)\
**Post date:** [November 27, 2012, 8:23pm UTC](https://discuss.elastic.co/t/json-ordering-solved-searchphaseexecutionexception-failed-to-execute-phase-query-fetch-issue/9851/1 "2012-11-27T20:23:46Z")

</div>

So it appears that ES wants its json hashes (for search, at least) to be in  
a certain order. I was getting certain weird failures where it would  
sometimes work and sometimes get the SearchPhaseExecutionException error.

This fails:

```
$ curl 

```

[http://localhost:9200/discussions\_test\_68/discussion/\_search?routing=68](http://localhost:9200/discussions_test_68/discussion/_search?routing=68) -d  
'{"query":{"filtered":{  
\>  
"filter":{"and":{"must":[{"term":{"site\_id":68}}]},"or":[{"term":{"public":"1"}},{"term":{"watchers":171}}]},  
\>  
"query":{"bool":{"must":[{"text":{"\_all":{"operator":"and","query":"testing  
2"}}}]}}  
\> }}}'

```
{"error":"SearchPhaseExecutionException[Failed to execute phase 

```

[query\_fetch], total failure; shardFailures  
{[ogrJqB3SRM67cXPUZxx8rA][discussions\_test][0]:  
SearchParseException[[discussions\_test][0]: from[-1],size[-1]: Parse  
Failure [Failed to parse source [{"query":{"filtered":{  
\n"filter":{"and":{"must":[{"term":{"site\_id":68}}]},"or":[{"term":{"public":"1"}},{"term":{"watchers":171}}]},\n"query":{"bool":{"must":[{"text":{"\_all":{"operator":"and","query":"testing  
2"}}}]}}\n}}}]]]; nested: QueryParsingException[[discussions\_test]  
[filtered] requires 'query' element]; }]","status":500}

But then if we reverse the order of "filter" and "query" in  
query[filtered], so that 'query' comes first ---\>

```
$ curl 

```

[http://localhost:9200/discussions\_test\_68/discussion/\_search?routing=68](http://localhost:9200/discussions_test_68/discussion/_search?routing=68) -d  
'{"query":{"filtered":{  
\>  
"query":{"bool":{"must":[{"text":{"\_all":{"operator":"and","query":"testing  
2"}}}]}},  
\>  
"filter":{"and":{"must":[{"term":{"site\_id":68}}]},"or":[{"term":{"public":"1"}},{"term":{"watchers":171}}]}  
\> }}}'

{"took":1,"timed\_out":false,"\_shards":{"total":1,"successful":1,"failed":0},"hits":{"total":0,"max\_score":null,"hits":[]}}

Um, what? Am I crazy/stupid, or do you actually have to send the hash  
values in a certain order for ES to accept them? FWIW the ruby library I am  
using (ruby in general..) doesn't guarantee any particular ordering of  
hash keys when serializing into JSON.

--Courtenay

--

---

<div class="post-metadata">

**Author:** ![Clinton\_Gormley](https://avatars.discourse-cdn.com/v4/letter/c/50afbb/32.png) [@Clinton\_Gormley](https://discuss.elastic.co/u/Clinton_Gormley)\
**Post date:** [November 27, 2012, 8:29pm UTC](https://discuss.elastic.co/t/json-ordering-solved-searchphaseexecutionexception-failed-to-execute-phase-query-fetch-issue/9851/2 "2012-11-27T20:29:36Z")

</div>

On Tue, 2012-11-27 at 12:23 -0800, courtenay wrote:

> So it appears that ES wants its json hashes (for search, at least) to  
> be in a certain order. I was getting certain weird failures where it  
> would sometimes work and sometimes get the  
> SearchPhaseExecutionException error.

It doesn't require a particular order, but it does require a valid  
query, which yours is not. It uses a streaming JSON parser which may  
fail differently based upon the order in which the bad query is  
presented.

You are confusing and/or queries with bool

clint

--

---

<div class="post-metadata">

**Author:** ![courtenay](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/courtenay/32/1933_2.png) [@courtenay](https://discuss.elastic.co/u/courtenay)\
**Post date:** [November 27, 2012, 8:37pm UTC](https://discuss.elastic.co/t/json-ordering-solved-searchphaseexecutionexception-failed-to-execute-phase-query-fetch-issue/9851/3 "2012-11-27T20:37:25Z")

</div>

On Tuesday, November 27, 2012 12:29:36 PM UTC-8, Clinton Gormley wrote:

> On Tue, 2012-11-27 at 12:23 -0800, courtenay wrote:
> 
> > So it appears that ES wants its json hashes (for search, at least) to  
> > be in a certain order. I was getting certain weird failures where it  
> > would sometimes work and sometimes get the  
> > SearchPhaseExecutionException error.
> 
> It doesn't require a particular order, but it does require a valid  
> query, which yours is not. It uses a streaming JSON parser which may  
> fail differently based upon the order in which the bad query is  
> presented.
> 
> You are confusing and/or queries with bool
> 
> clint

Interesting -- but it doesn't always fail. So how is that a bad query, if  
it sometimes works?

--

---

<div class="post-metadata">

**Author:** ![courtenay](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/courtenay/32/1933_2.png) [@courtenay](https://discuss.elastic.co/u/courtenay)\
**Post date:** [November 27, 2012, 8:40pm UTC](https://discuss.elastic.co/t/json-ordering-solved-searchphaseexecutionexception-failed-to-execute-phase-query-fetch-issue/9851/4 "2012-11-27T20:40:10Z")

</div>

On Tuesday, November 27, 2012 12:37:25 PM UTC-8, courtenay wrote:

> On Tuesday, November 27, 2012 12:29:36 PM UTC-8, Clinton Gormley wrote:
> 
> > On Tue, 2012-11-27 at 12:23 -0800, courtenay wrote:
> > 
> > > So it appears that ES wants its json hashes (for search, at least) to  
> > > be in a certain order. I was getting certain weird failures where it  
> > > would sometimes work and sometimes get the  
> > > SearchPhaseExecutionException error.
> > 
> > It doesn't require a particular order, but it does require a valid  
> > query, which yours is not. It uses a streaming JSON parser which may  
> > fail differently based upon the order in which the bad query is  
> > presented.
> > 
> > You are confusing and/or queries with bool
> > 
> > clint
> 
> Interesting -- but it doesn't always fail. So how is that a bad query, if  
> it sometimes works?

(this is a simplified version of the actual queries we use -- I cut out a  
bunch of other stuff like more conditions in "bool" )

--

---

<div class="post-metadata">

**Author:** ![Clinton\_Gormley](https://avatars.discourse-cdn.com/v4/letter/c/50afbb/32.png) [@Clinton\_Gormley](https://discuss.elastic.co/u/Clinton_Gormley)\
**Post date:** [November 28, 2012, 10:25am UTC](https://discuss.elastic.co/t/json-ordering-solved-searchphaseexecutionexception-failed-to-execute-phase-query-fetch-issue/9851/5 "2012-11-28T10:25:48Z")

</div>

> Interesting -- but it doesn't always fail. So how is that a bad query,  
> if it sometimes works?

It may not throw an error (which I consider to be a bug) but it isn't  
working, where "working" = "doing what you intend"

clint

--

---

<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 6, 2017, 3:02am UTC](https://discuss.elastic.co/t/json-ordering-solved-searchphaseexecutionexception-failed-to-execute-phase-query-fetch-issue/9851/6 "2017-07-06T03:02:30Z")

</div>


