ElasticSearch: search inside the array of objects ElasticSearch: search inside the array of objects elasticsearch elasticsearch

ElasticSearch: search inside the array of objects


Here's one way you can do it, using nested docs:

I defined an index like this:

PUT /test_index{   "mappings": {      "doc": {         "properties": {            "parent": {               "type": "nested",               "properties": {                  "label": {                     "type": "string"                  },                  "name": {                     "type": "string"                  }               }            }         }      }   }}

Indexed your document:

PUT /test_index/doc/1{   "parent": [      {         "name": "turkey",         "label": "Turkey"      },      {         "name": "turkey,mugla-province",         "label": "Mugla (province)"      }   ]}

Then either of these queries will return it:

POST /test_index/_search{    "query": {        "nested": {           "path": "parent",           "query": {               "match": {                  "parent.name": "turkey"               }           }        }    }}POST /test_index/_search{    "query": {        "nested": {           "path": "parent",           "query": {               "match": {                  "parent.name": "turkey,mugla-province"               }           }        }    }}

Here's the code I used:

http://sense.qbox.io/gist/6258f8c9ee64878a1835b3e9ea2b54e5cf6b1d9e


For search multiple terms use the Terms query instead of Term query.

"terms" : {        "tags" : [ "turkey", "mugla-province" ],        "minimum_should_match" : 1    }

There are various ways to construct this query, but this is the simplest and most elegant in the current version of ElasticSearch (1.6)