Skip to content

Instantly share code, notes, and snippets.

@r10r
Created June 3, 2012 22:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save r10r/2865256 to your computer and use it in GitHub Desktop.
Save r10r/2865256 to your computer and use it in GitHub Desktop.
Elasticsearch 0.20.0.Beta1-SNAPSHOT with has_parent merged : Search for childs with "has_parent" filter
{ "index" : { "_index" : "parent_child", "_type" : "store", "_id" : "store1" } }
{ "name" : "auchan", "owner" : "chris" }
{ "index" : { "_index" : "parent_child", "_type" : "department", "_id" : "department1", "parent" : "store1" } }
{ "name" : "toys", "numberOfProducts" : 150 }
{ "index" : { "_index" : "parent_child", "_type" : "product", "_id" : "product1", "parent" : "department1", "routing" : "store1" } }
{ "name" : "gun", "trademark" : "tiger", "price" : 9, "store_id" : "store1" }
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"term": {
"trademark": "tiger"
}
}
]
}
},
"filter": {
"has_parent": {
"type": "department",
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"term": {
"name": "toys"
}
}
]
}
},
"filter": {
"has_parent": {
"type": "store",
"query": {
"term": {
"name": "auchan"
}
}
}
}
}
}
}
}
}
}
}
#!/bin/bash
# create the index with mappings and parent field definitions
curl -XPOST 'http://localhost:9200/parent_child' -d @mapping.json
# bulk insert data into the index
curl -s -XPOST localhost:9200/_bulk?pretty=true --data-binary @bulk_data.json
# execute the query with 'has_parent
curl -XPOST 'http://localhost:9200/parent_child/_search?pretty=true' -d @has_parent_query.json
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"store": {
"properties": {
"name": {
"type": "string"
},
"owner": {
"type": "string"
}
}
},
"department": {
"_parent": {
"type": "store"
},
"properties": {
"name": {
"type": "string"
},
"numberOfProducts": {
"type": "long"
}
}
},
"product": {
"_parent": {
"type": "department"
},
"_routing": {
"required": true,
"path": "store_id"
},
"properties": {
"name": {
"type": "string"
},
"trademark": {
"type": "string"
},
"price": {
"type": "long"
},
"store_id": {
"type": "string"
}
}
}
}
}
@r10r
Copy link
Author

r10r commented Jun 3, 2012

Requirements

  • an elasticsearch version including the has_parent filter hlian/elasticsearch@8f9bbaa0897678e7f2e82d1e90b23f3add20e164
  • curl/bash

Usage

  • download the gist
  • start an elasticsearch instance
  • run the has_parent_query.sh script

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment