私はelasticsearchで何かをしようとしています。Elasticsearch:フィルタリングされたネストされたフィールドのスクリプト化された合計でフィルタリング
は、ネストされたオブジェクトの製品を手に入れた:
"products": {
"include_in_root": true,
"type": "nested",
"properties": {
"date": {
"format": "strict_date_optional_time||epoch_millis",
"type": "date"
},
"type": {
"index": "not_analyzed",
"type": "string"
},
"cat4": {
"index": "not_analyzed",
"type": "string"
},
"geo": {
"type": "geo_point"
},
"baseprice": {
"type": "long"
},
"cat2": {
"index": "not_analyzed",
"type": "string"
},
"cat3": {
"index": "not_analyzed",
"type": "string"
},
"feeltemp": {
"type": "long"
},
"cat1": {
"index": "not_analyzed",
"type": "string"
},
"price": {
"type": "double"
},
"qty": {
"index": "not_analyzed",
"type": "string"
},
"name": {
"index": "not_analyzed",
"type": "string"
},
"weather": {
"index": "not_analyzed",
"type": "string"
},
"id": {
"index": "not_analyzed",
"type": "string"
},
"stock": {
"type": "long"
},
"brand": {
"index": "not_analyzed",
"type": "string"
}
}
}
私はタイプが=「cartadd」と例えばCAT1 =「テスト」場合にのみ、それらを照会します。
問題、ネストされたフィルタとクエリがあれば:
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "products",
"filter": {
"bool": {
"must": [
{
"script": {
"script": "sum=0;for(obj in _source.products) {sum = sum + 1 }; sum>=1;"
}
},
{
"term": {
"products.type": "view"
}
}
]
}
}
}
}
]
}
}
}
それは何をカウントしません。
私は、ネストされた運転削除する場合:
{
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"script": {
"script": "sum=0;for(obj in _source.products) {if(obj.type=='cartadd') {sum = sum + obj.price }}; sum>=2;"
}
}
]
}
}
}
}
}
それが動作すると、オブジェクトを数えます。しかし、私はもはやネストしたオブジェクトをフィルタリングできません。
groovyスクリプトでif条件を追加しましたが、私は動的に追加された条件をさらに多く持つことができます。
どうすればいいですか?
ありがとうございます!
{
"query": {
"bool": {
"filter": [
{
"script": {
"script": "sum=0;for(obj in _source.products) {sum = sum + 1 }; sum>=1;"
}
},
{
"nested": {
"path": "products",
"filter": {
"term": {
"products.type": "view"
}
}
}
}
]
}
}
}
のほかに、良いアイデアが希望:
ありがとうございました。問題は次のとおりです。 >最初のソリューションでは、すべての製品がカウントされますが、type = viewでフィルタリングされません。 > 2番目のソリューションでは、nbProductsは動的ではありません。私は他の多くのフィルタを追加する必要があります。 – Kaliseo
だから、あなたは 'products.type = view'条件に合った製品だけを数えたいと思っていますか?それは本質的なものです。ネストされた 'products'マッチが1つあれば、少なくとも1つがマッチしているので、製品数は必然的に> = 1です。より多くの条件がある場合は、それらを 'nested'クエリの' bool/filter'に追加することができます。 – Val