4

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!

1 Answer 1

8

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"
    }
  }
}'
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.