elasticsearch sort error using script
elasticsearch, sorting
Solution
This is an issue with shell. You need to escape the singe quotes. The query should look like -
curl -XPOST 'http://localhost:9200/pb/p/_search' -d '{
"query": {
"match": {
"first_name": "john"
}
},
"sort": {
"_script": {
"script": "doc['"'"'dob_size'"'"'].value * factor1",
"type": "number",
"params": {
"factor1": 1
},
"order": "desc"
}
}
}'
Problem
Currently I encountered a weird issue: when I sort based on a field, it throws out an exception: ``` curl -XGET 'http://localhost:9200/pb/p/_search?pretty' -d '{ "query": {"match" : {"first_name" : "john"}}, "sort" : { "_script" : { "script" : "doc['dob_size'].value * factor1", "type" : "number", "params" : {"factor1" : 1}, "order" : "desc" }}}' { "took" : 5, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 1, "failed" : 4, "failures" : [ { "index" : "pb", "shard" : 0, "status" : 500, "reason" : "QueryPhaseExecutionException[[pb][0]: query[filtered(first_name:john)->cache(_type:p)],from[0],size[10],sort[<custom:\"_script\": org.elasticsearch.search.sort.ScriptSortParser$2@7ac5f844>!]: Query Failed [Failed to execute main query]]; nested: GroovyScriptExecutionException[MissingPropertyException[No such property: dob_size for class: Script132]]; " }, { "index" : "pb", "shard" : 2, "status" : 500, "reason" : "QueryPhaseExecutionException[[pb][2]: query[filtered(first_name:john)->cache(_type:p)],from[0],size[10],sort[<custom:\"_script\": org.elasticsearch.search.sort.ScriptSortParser$2@12127900>!]: Query Failed [Failed to execute main query]]; nested: GroovyScriptExecutionException[MissingPropertyException[No such property: dob_size for class: Script132]]; " }, { "index" : "pb", "shard" : 3, "status" : 500, "reason" : "QueryPhaseExecutionException[[pb][3]: query[filtered(first_name:john)->cache(_type:p)],from[0],size[10],sort[<custom:\"_script\": org.elasticsearch.search.sort.ScriptSortParser$2@5b2e7754>!]: Query Failed [Failed to execute main query]]; nested: GroovyScriptExecutionException[MissingPropertyException[No such property: dob_size for class: Script132]]; " }, { "index" : "pb", "shard" : 4, "status" : 500, "reason" : "QueryPhaseExecutionException[[pb][4]: query[filtered(first_name:john)->cache(_type:p)],from[0],size[10],sort[<custom:\"_script\": org.elasticsearch.search.sort.ScriptSortParser$2@5dd9cdc1>!]: Query Failed [Failed to execute main query]]; nested: GroovyScriptExecutionException[MissingPropertyException[No such property: dob_size for class: Script132]]; " } ] }, "hits" : { "total" : 0, "max_score" : null, "hits" : [ ] } } ``` However when I remove the sort part, it works perfectly: ``` curl -XGET 'http://localhost:9200/pb/p/_search?pretty' -d '{ "query": {"match" : {"first_name" : "john"}}}' { "took" : 3, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 4, "max_score" : 0.30685282, "hits" : [ { "_index" : "pb", "_type" : "p", "_id" : "4", "_score" : 0.30685282, "_source":{ "first_name" : ["john", "jon"], "last_name" : "abcdef", "location_size": 3, "relative_size": 3, "dob_size" : 1} }, { "_index" : "pb", "_type" : "p", "_id" : "1", "_score" : 0.30685282, "_source":{ "first_name" : ["john", "jon"], "last_name" : "abcdef", "location_size": 5, "relative_size": 3, "dob_size" : 1} }, { "_index" : "pb", "_type" : "p", "_id" : "2", "_score" : 0.30685282, "_source":{ "first_name" : ["john", "jon"], "last_name" : "abcdef", "location_size": 5, "relative_size": 4, "dob_size" : 0} }, { "_index" : "pb", "_type" : "p", "_id" : "3", "_score" : 0.30685282, "_source":{ "first_name" : ["john", "jon"], "last_name" : "abcdef", "location_size": 5, "relative_size": 4, "dob_size" : 1} } ] } } ``` I followed the guideline from here, but seems it does not work. The mapping is: ``` curl -XGET 'http://localhost:9200/pb/p/_mapping?pretty' { "pb" : { "mappings" : { "p" : { "properties" : { "dob_size" : { "type" : "integer" }, "first_name" : { "type" : "string", "index" : "not_analyzed" }, "last_name" : { "type" : "string", "index" : "not_analyzed" }, "location_size" : { "type" : "integer" }, "relative_size" : { "type" : "integer" } } } } } } ``` And the elasticsearch version is: ./elasticsearch -v Version: 1.4.1, Build: 89d3241/2014-11-26T15:49:29Z, JVM: 1.7.0_55 Any ideas? Thanks!