过滤弹性搜索中的值

时间:2015-08-26 10:47:27

标签: elasticsearch

我想从弹性搜索中的索引器获取列中两个项目的计数。我的索引器中有一个名为“category”的列,它包含多个条目。我有兴趣获得多个日期的“账单”和“支出”。为此,我编写了以下查询,它不适用于两个值。我可以将单个值设为“结算”或“支出”,但不能同时提取两个。

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

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



                }}}}}

以上代码在这种情况下不起作用,为了使其工作,我需要将“include”行更改为

"include": "billing"

或     “包括”:“支出”

如果有人调查并提供帮助,那将会很有帮助。:)

以下答案适用于我上面的帖子,现在我在上面的帖子中遇到了另外一个问题:

在我的'type'字段中,我想再过滤一个名为“花费”的值。这里的问题是 - ES将这两个措词视为两个术语,结果并不像预期的那样。请帮忙。只想将这两个措辞单词过滤为单个单词而不是两个单词。

2 个答案:

答案 0 :(得分:2)

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

  

可以过滤将为其创建存储桶的值。   这可以使用include和exclude参数来完成   基于正则表达式字符串或精确值的数组[1.5.0]   在1.5.0中添加。支持值数组。

因此可以在1.5版本之后使用数组

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

答案 1 :(得分:1)

include需要正则表达式模式。正如@jgr所指出的,这仅适用于elasticsearch<的版本。 1.5.0。所以对于查询中提供的示例 对于版本而言,它看起来如下所示< 1.5.0:

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

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