2015-08-26 51 views
1

我想从弹性搜索的索引器中获取列中两个项目的计数。在我的索引器中有一个名为“category”的列,它包含多个条目。我有兴趣在多个日期获得“计费”和“支出”。对此,我写了下面的查询,它不适用于两个值。我可以将“计费”或“支出”这两个值同时拉到一个值,但不是一个值。elasticsearch中的过滤值

{"dates": 
{"date_histogram": 
    {"field": "createdDateTime", 
     "interval": "day"}, 

     "aggs": {"fields": 
      {"term": 
       {"field": "type", 
        "include": ["billing", "expenditure"] 



       }}}}} 

上面的代码是不是在这种情况下工作,使其工作,我需要在“包含”行更改为

"include": "billing" 

或 “包括”:“收支两条线”

这将是很大的帮助,如果有人看着这个,并帮助。:)

下面的答案正在为我的职位上面,现在我遇到了上述pos吨:

在我的'类型'字段中,我想筛选一个更多的值称为“花上”。这里的问题是 - ES认为这两个词是两个词,结果并不如预期。请帮忙。只是想将这两个措辞单词作为一个单词而不是两个。

+0

@jgr,请我编辑了帖子。请查看最后两个部分查看我更新的帖子。用两个措词来解决一个小问题。 – santoshM

+0

@keety:请检查我是否编辑过这篇文章。请查看最后两个部分查看我更新的帖子。用两个措词来解决一个小问题。 – santoshM

回答

1

include需要一个正则表达式模式。正如@jgr指出的,这仅适用于elasticsearch < 1.5.0的版本。因此,对于查询 提供的例子看起来会是如下的<版本1.5.0:

"aggs": { 
     "aggterm": { 
     "terms": { 
      "field": "type", 
      "include" : "billing|expenditure" 
     } 
     } 
    } 

如果不是你在OP具有的例子应该工作

+0

非常感谢Keety,它的工作.. :) – santoshM

2

从ES文档(https://www.elastic.co/guide/en/elasticsearch/reference/1.5/search-aggregations-bucket-terms-aggregation.html?q=terms%20agg#_filtering_values):

可以过滤要创建桶的值。 这可以使用基于正则表达式字符串的 包含和排除参数或1.5.0中添加的精确值[1.5.0] 的数组完成。支持数组值。

因此,它可以使用数组,因为1.5版本

"aggs": { 
     "aggterm": { 
     "terms": { 
      "field": "type", 
      "include" : ["billing", "expenditure"] 
     } 
     } 
    }