お世話になります。
Elasticsearchの2.0がリリースされて、Pipeline Aggregationなどが使えるようになり、
Elasticsearch単体でかなりできることの幅が増えましたね!
先日2.1がcurrentになっていたのに今日見たら既に2.2になっておりました。。
追いつくのが大変です。。
さて、掲題の件ですが、お知恵をお借りしたく投稿しました。
あるIndex内にTypeが2つあり、それぞれ親子の関係を持っているとします。
親子間のリレーションとしては0 to many
であるとします。
PUT my-index
{
"mappings": {
"parent": {
"properties": {
"user_id": {
"type": "string"
}
}
},
"child": {
"_parent": {
"type": "user"
},
"properties": {
"value": {
"type": "string"
}
}
}
}
}
上記のようなスキーマに対して
curl -XPUT localhost:9200/_bulk --data-binary "@request"; echo
{ "index": { "_index": "my-index", "_type": "parent", "_id": "1" }
{ "user_id": "hogehoge" }
{ "index": { "_index": "my-index", "_type": "parent", "_id": "2" }
{ "user_id": "fugahuga" }
{ "index": { "_index": "my-index", "_type": "child", "_id": "1", "_parent": "1", "_routing": "1" }
{ "value": 300 }
{ "index": { "_index": "my-index", "_type": "child", "_id": "2", "_parent": "1", "_routing": "1" }
{ "value": 100 }
{ "index": { "_index": "my-index", "_type": "child", "_id": "3", "_parent": "1", "_routing": "1" }
{ "value": 600 }
{ "index": { "_index": "my-index", "_type": "child", "_id": "1", "_parent": "2", "_routing": "2" }
{ "value": 300 }
{ "index": { "_index": "my-index", "_type": "child", "_id": "2", "_parent": "2", "_routing": "2" }
{ "value": 50 }
{ "index": { "_index": "my-index", "_type": "child", "_id": "3", "_parent": "2", "_routing": "2" }
{ "value": 100 }
このようなデータを入れたとき、同じ親Typeに紐づく子Typeのvalue値の合計が一定値以上の、
親TypeのDocumentを取得したい、といった場合、何か良い方法はありますでしょうか?
例えば、child.valueのsumが1000以上のparent.user_id(もしくは_idでも可)を取得したいなど。
has_child内でAggregationは使えませんし、子TypeでAggregationをかけた結果を検索に使いたくとも、
基本的にaggregationの結果はDocument Countしか返ってこず。。
もし何か良い解決方法等あれば、ご教示頂けますと幸いです。
どうぞ宜しくお願い致します。