PyElasticSearch上的聚合(pyes)

时间:2014-12-24 09:28:53

标签: elasticsearch pyes

我希望计算一些索引产品数据的值计数聚合,但我似乎在ValueCountAgg构造函数中得到了一些参数错误。

此类索引数据的示例如下 - :

{
  "_index": "test-index",
  "_type": "product_product",
  "_id": "1",
  "_score": 1,
  "_source": {
    "code": "SomeProductCode1",
    "list_price": 10,
    "description": null,
    "displayed_on_eshop": "true",
    "active": "true",
    "tree_nodes": [],
    "id": 1,
    "category": {},
    "name": "This is Product",
    "price_lists": [
      {
        "price": 10,
        "id": 1
      },
      {
        "price": 10,
        "id": 2
      }
    ],
    "attributes": {
      "color": "blue",
      "attrib": "something",
      "size": "L"
    },
    "type": "goods"
  }
}

我正在计算聚合如下 - :

for attribute in filterable_attributes:
    count = ValueCountAgg(
        name='count_'+attribute, field='attributes.'+attribute
    )
    query.agg.add(count)

其中query是包含在~pyes.query.Query对象中的~pyes.query.Search对象。 filterable_attributes是属性名称列表,例如颜色和大小。

我也试过设置field=attribute,但似乎没有任何区别。我在进行搜索时获得的结果集具有以下aggs属性 - :

{'count_size': {'value': 0}, 'count_color': {'value': 0}}

其中sizecolorattributes字典内编入索引,如上所示。这些显然是错误的结果,我认为这是因为我没有正确设置field

我哪里错了?

1 个答案:

答案 0 :(得分:1)

我发现了我错的地方。

根据Scoping Aggregations,默认情况下,聚合的范围与其查询相关联。我的查询返回零结果,我不得不修改相同的搜索短语。

之后我得到了所需的结果,并且汇总结果正确。

{'count_size': {'value': 3}, 'count_color': {'value': 3}}