Elasticsearch结果与过滤器组

时间:2018-01-19 00:54:06

标签: elasticsearch grouping aggregate resultset jobs

我在我的系统上实施Elasticsearch,但我有一个问题:

我正在创建一个职位门户,我目前使用下面的请求列出所有可用职位:

GET /companies/job/_search
{
    "sort" : [
        { "post_date" : {"order" : "asc"}},
        "_score"
    ]
}

然后,我得到结果,所有可用的位置(2357),例如:

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 2537,
    "max_score": 1.9790175,
    "hits": [
      {
        "_index": "companies",
        "_type": "job",
        "_id": "2",
        "_score": 1.9790175,
        "_source": {
          "name": "HTML Developer (1 - 2 Yrs Exp.)",
          "category": "Graphic Designer",
          "location": "Nolda",
          "skills": "Javascript"
        }
      },
      {
        "_index": "companies",
        "_type": "job",
        "_id": "114",
        "_score": 0.30432263,
        "_source": {
          "name": "PHP Developer (2 Yrs Exp.)",
          "category": "Engineering Job",
          "location": "Pune",
          "skills": "PHP"
        }
      }
    ]
  }
}

但我想根据返回的列表在侧边栏中显示过滤器。与附带的原型类似。

实施例: 返回了2357个空缺职位。 在旁边的列表中,显示了总空缺,按类别分组,我们有214个是平面设计师,514个是工程等... 按位置分组,我们有:Nolda为1254,Pune为221等...

我想知道,如果在同一个请求中我将查询返回所有可用的作业,那么也可以进行分组。

或者,如果我必须提出两个请求,一个是带来所有作业,另一个是带来分组(以及分组中每个项目的计数器)。

Prototype

1 个答案:

答案 0 :(得分:1)

试试这个,

 GET companies/job/_search {
        "size": 0, "aggs": {
            "group_by_state": {
                "terms": {
                    "field": "category.keyword", "size": 15
                }
            }
        }
    }

其中field是您喜欢的类别,位置,技能的字段 然后大小将是页面所需的结果数。

希望它会有所帮助:)