0

I want to fetch all the states where country name is "India" . Why I am not able to search nested data with elastic search ?

Exception : nested: QueryParsingException[[userinfo] [nested] nested object under path [country] is not of nested type]; }]


Query I am Executing :

userinfo is the index name and state is the type

        POST /userinfo/state/_search?v
        {
            "query": {
                "nested": {

                   "path": "country",
                   "query": {
                       "match": {
                          "country.name": "India"
                       }
                   }
                }
            }
        }

        ------------------------------
        My Json is for state type : 

        {
                    "_index": "userinfo",
                    "_type": "state",
                    "_id": "35",
                    "_score": 1,
                    "_source": {
                       "id": "35",
                       "name": "County Down",
                       "abbreviation": "DWN",
                       "isDeleted": 0,
                       "country": {
                          "id": "3",
                          "name": "United Kingdom",
                          "abbreviation": "UK",
                          "isDeleted": 0
                       }
                    }
                 }

        -------------------------------------

 </br></br>
        State.java

        package com.elastic.entity;

        import org.springframework.data.annotation.Id;
        import org.springframework.data.elasticsearch.annotations.Document;
        import org.springframework.data.elasticsearch.annotations.Field;
        import org.springframework.data.elasticsearch.annotations.FieldType;

        @Document(indexName = "userinfo", type = "state")
        public class State {


            @Id
            private String id;

            private String name;
            private String abbreviation;
            private int isDeleted;

            @Field(type = FieldType.Nested)
            private Country country;



            public State()
            {
                super();
            }

            public State(String id, String name, String abbreviation, int isDeleted, Country country) {
                super();
                this.id = id;
                this.name = name;
                this.abbreviation = abbreviation;
                this.isDeleted = isDeleted;
                this.country = country;
            }


            public String getId() {
                return id;
            }
            public void setId(String id) {
                this.id = id;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public String getAbbreviation() {
                return abbreviation;
            }
            public void setAbbreviation(String abbreviation) {
                this.abbreviation = abbreviation;
            }
            public int getIsDeleted() {
                return isDeleted;
            }
            public void setIsDeleted(int isDeleted) {
                this.isDeleted = isDeleted;
            }
            public Country getCountry() {
                return country;
            }
            public void setCountry(Country country) {
                this.country = country;
            }




        }

2 Answers 2

1
Try This with match : 

POST /index/type/_search?v
{
    "query": {
        "match": {
           "state.country.name": "India"
        }
    }
}
Sign up to request clarification or add additional context in comments.

Comments

0

This will give you all documents having country India

{
  "query": {
    "query_string": {
      "default_field": "country.name"
      , "query": "India"
    }
  }
}

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.