Searchkick聚合行为

时间:2016-08-19 03:20:33

标签: ruby-on-rails elasticsearch searchkick

我正在使用Searchkick Gem和Elastic搜索,并尝试了解聚合行为。

我有三个方面(聚合):城市,州和公司。

如果我按其中任何一个过滤,则减少其他两个的计数以反映结果集中的总数。但选定的方面会带回所有值。所以说我在索引中有100个项目,并且我在索引中有2个项目的公司进行过滤,城市和州计数更新以反映不超过2.但公司计数仍为100。

示例(过滤到City = Atlanta)

{
   "query": {
      "function_score": {
         "functions": [
            {
               "filter": {
                  "and": [
                     {
                        "term": {
                           "featured": true
                        }
                     }
                  ]
               },
               "boost_factor": 1000
            }
         ],
         "query": {
            "match_all": {}
         },
         "score_mode": "sum"
      }
   },
   "size": 20,
   "from": 0,
   "post_filter": {
      "bool": {
         "filter": [
            {
               "range": {
                  "expiration_date": {
                     "from": "2016-08-18T23:07:15.670-04:00",
                     "include_lower": true
                  }
               }
            },
            {
               "range": {
                  "created_at": {
                     "to": "2016-08-18T23:07:15.670-04:00",
                     "include_upper": true
                  }
               }
            },
            {
               "term": {
                  "published": true
               }
            },
            {
               "term": {
                  "tenant_id": 4
               }
            },
            {
               "term": {
                  "city": "Atlanta"
               }
            }
         ]
      }
   },
   "aggs": {
      "company": {
         "filter": {
            "bool": {
               "must": [
                  {
                     "range": {
                        "expiration_date": {
                           "from": "2016-08-18T23:07:15.670-04:00",
                           "include_lower": true
                        }
                     }
                  },
                  {
                     "range": {
                        "created_at": {
                           "to": "2016-08-18T23:07:15.670-04:00",
                           "include_upper": true
                        }
                     }
                  },
                  {
                     "term": {
                        "published": true
                     }
                  },
                  {
                     "term": {
                        "tenant_id": 4
                     }
                  },
                  {
                     "term": {
                        "city": "Atlanta"
                     }
                  }
               ]
            }
         },
         "aggs": {
            "company": {
               "terms": {
                  "field": "company",
                  "size": 10
               }
            }
         }
      },
      "city": {
         "filter": {
            "bool": {
               "must": [
                  {
                     "range": {
                        "expiration_date": {
                           "from": "2016-08-18T23:07:15.670-04:00",
                           "include_lower": true
                        }
                     }
                  },
                  {
                     "range": {
                        "created_at": {
                           "to": "2016-08-18T23:07:15.670-04:00",
                           "include_upper": true
                        }
                     }
                  },
                  {
                     "term": {
                        "published": true
                     }
                  },
                  {
                     "term": {
                        "tenant_id": 4
                     }
                  }
               ]
            }
         },
         "aggs": {
            "city": {
               "terms": {
                  "field": "city",
                  "size": 10
               }
            }
         }
      },
      "state": {
         "filter": {
            "bool": {
               "must": [
                  {
                     "range": {
                        "expiration_date": {
                           "from": "2016-08-18T23:07:15.670-04:00",
                           "include_lower": true
                        }
                     }
                  },
                  {
                     "range": {
                        "created_at": {
                           "to": "2016-08-18T23:07:15.670-04:00",
                           "include_upper": true
                        }
                     }
                  },
                  {
                     "term": {
                        "published": true
                     }
                  },
                  {
                     "term": {
                        "tenant_id": 4
                     }
                  },
                  {
                     "term": {
                        "city": "Atlanta"
                     }
                  }
               ]
            }
         },
         "aggs": {
            "state": {
               "terms": {
                  "field": "state",
                  "size": 10
               }
            }
         }
      }
   },
   "fields": []
}

结果(返回了2个结果,但58个城市聚合回来了)。注意公司和城市返回正确的聚合数量:

{
   "took": 114,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 1,
      "hits": [
         {
            "_index": "jobs_development_20160818140128648",
            "_type": "job",
            "_id": "457134",
            "_score": 1
         },
         {
            "_index": "jobs_development_20160818140128648",
            "_type": "job",
            "_id": "457137",
            "_score": 1
         }
      ]
   },
   "aggregations": {
      "city": {
         "doc_count": 58,
         "city": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 19,
            "buckets": [
               {
                  "key": "Los Angeles",
                  "doc_count": 8
               },
               {
                  "key": "London",
                  "doc_count": 7
               },
               {
                  "key": "New York",
                  "doc_count": 7
               },
               {
                  "key": "Burbank",
                  "doc_count": 5
               },
               {
                  "key": "Pasig",
                  "doc_count": 3
               },
               {
                  "key": "Atlanta",
                  "doc_count": 2
               },
               {
                  "key": "Chicago",
                  "doc_count": 2
               },
               {
                  "key": "Culver City",
                  "doc_count": 2
               },
               {
                  "key": "London Borough of Hackney",
                  "doc_count": 2
               },
               {
                  "key": "Birmingham",
                  "doc_count": 1
               }
            ]
         }
      },
      "company": {
         "doc_count": 2,
         "company": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
               {
                  "key": "Second Story",
                  "doc_count": 2
               }
            ]
         }
      },
      "state": {
         "doc_count": 2,
         "state": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
               {
                  "key": "Georgia",
                  "doc_count": 2
               }
            ]
         }
      }
   }
}

我错过了什么?这是正确的行为吗?

0 个答案:

没有答案