I've encountered a weird problem that I hope someone has seen before, and 
can provide a resolution for.
 
I'm running Elasticsearch 1.0 downloaded as an RPM and installed on a 
cluster of two RedHat nodes. Five shards with one replica each is 
configured.

Unfortunately, I could not reproduce the problem with test data (yet), even 
though I tried it for hours. I'm posting my simplified setup with the hope 
that it helps.

# create the index
curl -XPUT http://localhost:9200/test_script/

# add mapping for parent type
curl -XPUT http://localhost:9200/test_script/my_parent/_mapping -d '
{
    "my_parent": {
        "properties": {
            "name": {"type": "string"}
        }
    }   
}'

# add mapping for child type
curl -XPUT http://localhost:9200/test_script/my_child/_mapping -d '
{
    "my_child": {
        "_parent": {"type": "my_parent"},
        "properties": {
            "value": {"type": "long"}
        }
    }
}'

# index some records
curl -XPUT http://localhost:9200/test_script/my_parent/1 -d '{"name": 
"Parent"}'
curl -XPUT http://localhost:9200/test_script/my_parent/2 -d '{"name": 
"ParentTwo"}'
curl -XPUT http://localhost:9200/test_script/my_parent/3 -d '{"name": 
"ParentThree"}'
curl -XPUT http://localhost:9200/test_script/my_child/abc?parent=1 -d 
'{"value": 1234567}'


When I execute the following search (on my real index)

curl -XGET http://localhost:9200/test_script/my_parent/_search?pretty=true 
-d '
{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "must_not": {
                        "has_child": {
                            "type": "my_child",
                            "filter": {
                                "script": {
                                    "script": 
"doc[\"my_child.value\"].value != 1234567"
                                }
                            }
                        }
                    },
                    "must": {
                        "script": {
                            "script": 
"doc[\"my_parent.name\"].value.equals(\"parent\")"
                        }
                    }
                }
            }
        }
    }
}'

I get partial results because one of the shards fails with this error

  "_shards" : {
    "total" : 5,
    "successful" : 4,
    "failed" : 1,
    "failures" : [ {
      "index" : "test_script",
      "shard" : 4,
      "status" : 500,
      "reason" : 
"RemoteTransportException[[host-2][inet[/192.168.0.2:9300]][search/phase/query]];
 
nested: QueryPhaseExecutionException[[test_script][4]: 
query[filtered(ConstantScore(BooleanFilter(-CustomQueryWrappingFilter(child_filter[my_child/my_parent](filtered(ConstantScore(ScriptFilter(vid=(String)doc[\"my_child.\"].value;
 
doc[\"my_child.value\"].value != 
1234567;)))->cache(_type:my_child))))))->cache(_type:my_parent)],from[0],size[10]:
 
Query Failed [Failed to execute main query]]; nested: 
PropertyAccessException[[Error: could not access: value; in class: 
org.elasticsearch.index.fielddata.ScriptDocValues$Empty]\n[Near : {... 
value ....}]\n             ^\n[Line: 1, Column: 1]]; "


All fields are dense (i.e. populated in every parent or child record), so 
the field and the value should be available. 

It might be helpful to note that the exception always occurs on the other 
node and not on the one my http request targeted. 

I never get an error, but receive the correct results, if I change the 
query to something like this

curl -XGET http://localhost:9200/test_script/my_parent/_search?pretty=true 
-d '
{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "must_not": {
                        "has_child": {
                            "type": "my_child",
                            "filter": {
                                "script": {
                                    "script": 
"doc[\"my_child.value\"].value != 1234567"
                                }
                            }
                        }
                    },
                    "must": {
                *        "term": {"my_parent.name": "parent"}*
                    }
                }
            }
        }
    }
}'

I appreciate any help you can provide.

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/7768222d-a7d7-41e8-bfc9-5dbe0ad13a8e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to