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)