2017-12-01 9 views
0

弾性フィルターファセット:私はこのクエリをフィルタリングすることができる午前ダイナミックプロパティを持つドキュメント持っ数

{ 
    "query": { 
     "nested": { 
      "path": "properties", 
      "query" : { 
       "bool": { 
        "must" : [ 
         { 
          "term" : { 
           "properties.name": "Merk" 
          } 
         }, 
         { 
          "term" : { 
           "properties.value": "Elcee Holland" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

このクエリの結果は次のとおりです。

{ 
    "took": 12, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "skipped": 0, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 3, 
     "max_score": 10.14826, 
     "hits": [ 
      { 
       "_index": "demo-articles-v3", 
       "_type": "article", 
       "_id": "120400871755634330808993320", 
       "_score": 10.14826, 
       "_source": { 
        "id": "120400871755634330808993320", 
        "name": "Metaalschroef binnenzeskant, DIN 912 RVS A4-80", 
        "description": "m16x70 cilinderschroef bzk a4-80 din912 klasse 80", 
        "fullDescription": "Metaalschroef met een binnenzeskant cilinderkop", 
        "synonyms": [], 
        "properties": [ 
         { 
          "name": "draad", 
          "value": "16", 
          "sort": 99 
         }, 
         { 
          "name": "lengte", 
          "value": "70", 
          "sort": 99 
         }, 
         { 
          "name": "materiaal", 
          "value": "roestvaststaal", 
          "sort": 99 
         }, 
         { 
          "name": "kwaliteit (materiaal)", 
          "value": "A4", 
          "sort": 99 
         }, 
         { 
          "name": "DIN", 
          "value": "912", 
          "sort": 99 
         }, 
         { 
          "name": "AISI", 
          "value": "316", 
          "sort": 99 
         }, 
         { 
          "name": "draadsoort", 
          "value": "metrisch", 
          "sort": 99 
         }, 
         { 
          "name": "Merk", 
          "value": "Elcee Holland", 
          "sort": 1 
         } 
        ] 
      }, 
      { 
       "_index": "demo-articles-v3", 
       "_type": "article", 
       "_id": "120304871755635880708993326", 
       "_score": 10.145194, 
       "_source": { 
        "id": "120304871755635880708993326", 
        "name": "Zeskant moer, DIN 934 RVS A4-80", 
        "description": "m16 zeskantmoer rvs a4-80 din934", 
        "fullDescription": "Zeskanten moer in A4-80 kwaliteit", 
        "synonyms": [], 
        "properties": [ 
         { 
          "name": "draad", 
          "value": "16", 
          "sort": 99 
         }, 
         { 
          "name": "materiaal", 
          "value": "roestvaststaal", 
          "sort": 99 
         }, 
         { 
          "name": "kwaliteit (materiaal)", 
          "value": "A4-80", 
          "sort": 99 
         }, 
         { 
          "name": "DIN", 
          "value": "934", 
          "sort": 99 
         }, 
         { 
          "name": "AISI", 
          "value": "316", 
          "sort": 99 
         }, 
         { 
          "name": "draadsoort", 
          "value": "metrisch", 
          "sort": 99 
         }, 
         { 
          "name": "Merk", 
          "value": "Elcee Holland", 
          "sort": 1 
         } 
        ] 
       } 
      }, 
      { 
       "_index": "demo-articles-v3", 
       "_type": "article", 
       "_id": "120044871755635678006176201", 
       "_score": 10.054587, 
       "_source": { 
        "id": "120044871755635678006176201", 
        "name": "Zeskanttapbout, DIN 933 RVS A4-80", 
        "description": "m16x45 tapbout din933 a4-80", 
        "fullDescription": "Zeskanten tapbout", 
        "synonyms": [], 
        "properties": [ 
         { 
          "name": "draad", 
          "value": "16", 
          "sort": 99 
         }, 
         { 
          "name": "lengte", 
          "value": "45", 
          "sort": 99 
         }, 
         { 
          "name": "aandrijving", 
          "value": "zeskant", 
          "sort": 99 
         }, 
         { 
          "name": "materiaal", 
          "value": "roestvaststaal", 
          "sort": 99 
         }, 
         { 
          "name": "kwaliteit (materiaal)", 
          "value": "A4-80", 
          "sort": 99 
         }, 
         { 
          "name": "DIN", 
          "value": "933", 
          "sort": 99 
         }, 
         { 
          "name": "AISI", 
          "value": "316", 
          "sort": 99 
         }, 
         { 
          "name": "draadsoort", 
          "value": "metrisch", 
          "sort": 99 
         }, 
         { 
          "name": "Merk", 
          "value": "Elcee Holland", 
          "sort": 1 
         } 
        ] 
       } 
      } 
     ] 
    } 
} 

は今、私はしたいと思いますがフィルタリングされた検索結果の面を取得します。だから私は "draad"(3):16(3)とバケツが好きです。など

私はこのクエリを試みた:

{ 
    "size" : 0, 
    "aggs" : { 
     "all" : { 
      "global" : {}, 
      "aggs" : { 
       "features" : { 
        "nested" : { 
         "path" : "properties" 
        }, 
        "aggs" : { 
         "names" : { 
          "filter" : { 
           "nested" : { 
            "path" : "properties", 
            "query" : { 
             "bool" : { 
              "must" : [{ 
                "term" : { 
                 "properties.name" : "Merk" 
                } 
               }, { 
                "term" : { 
                 "properties.value" : "Elcee Holland" 
                } 
               } 
              ] 
             } 
            } 
           } 
          }, 
          "aggs" : { 
           "filtered_names" : { 
            "terms" : { 
             "field" : "properties.name", 
             "size" : 5 
            }, 
            "aggs" : { 
             "values" : { 
              "terms" : { 
               "field" : "properties.value", 
               "size" : 5 
              } 
             } 
            } 
           } 
          } 

         } 
        } 
       } 
      } 
     } 
    } 
} 

をしかし、これは奇妙な結果を返します。いくつかのバケツの代わりにただ一つのバケツ...私はここで間違っていますか?

{ 
    "took": 14, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "skipped": 0, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 9288, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "all": { 
      "doc_count": 9288, 
      "features": { 
       "doc_count": 41925, 
       "names": { 
        "doc_count": 3, 
        "filtered_names": { 
         "doc_count_error_upper_bound": 0, 
         "sum_other_doc_count": 0, 
         "buckets": [ 
          { 
           "key": "draadsoort", 
           "doc_count": 3, 
           "values": { 
            "doc_count_error_upper_bound": 0, 
            "sum_other_doc_count": 0, 
            "buckets": [ 
             { 
              "key": "metrisch", 
              "doc_count": 3 
             } 
            ] 
           } 
          } 
         ] 
        } 
       } 
      } 
     } 
    } 
} 

答えて

0

私はあなたのクエリからいくつかのセクションを削除しましたが、これは不要だと思います。これはネストされた集計を行う方法です。

{ 
    "size": 0, 
    "aggs": { 
    "features": { 
     "nested": { 
     "path": "properties" 
     }, 
     "aggs": { 
     "names": { 
      "filter": { 
      "must": [ 
       { 
       "term": { 
        "properties.name": "Merk" 
       } 
       }, 
       { 
       "term": { 
        "properties.value": "Elcee Holland" 
       } 
       } 
      ] 
      }, 
      "aggs": { 
      "filtered_names": { 
       "terms": { 
       "field": "properties.name", 
       "size": 5 
       }, 
       "aggs": { 
       "values": { 
        "terms": { 
        "field": "properties.value", 
        "size": 5 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

あなたの問題を解決することを願っています。

関連する問題