使用弹性搜索进行复杂聚合

时间:2016-06-08 12:40:51

标签: elasticsearch

假设这是我的弹性搜索结构:

 {
    "_index": "my_index",
    "_type": "person",
    "_id": "ID",
    "_source": {
       ...DATA...
    }
 }

  {
    "_index": "my_index",
    "_type": "result",
    "_id": "ID",
    "_source": {
       "personID": "personID"
       "date": "timestamp",
       "result": "integer",
       "speciality": "categoryID"
    }
 }

我希望根据以下内容获得最多“最流行”的人:

  • 过去30天的比赛数
  • 去年的比赛数
  • 比赛过去30天的结果
  • 过去30天内不同专业的数目

我正在考虑使用_score,但我不知道如何使用从“result”类型的文档聚合的某些值来影响分数。这就是我想要实现的目标

POST my_index/_search?search_type=dfs_query_then_fetch
{
 "size": 10,
 "query": {
  "function_score": {
   "query": { 
    "bool": {
     "must": [
      {
       "term": {
        "_type": {
         "value": "person"   
        }
       }
      }
     ]
    }
   }
  },
  "functions": [
   {
    "field_value_factor": {
     "field": {
      "query": {
       //competitions in the last 30 days
      },
      "aggs": { 
       //cout
      } 
     },
     "factor":   1
    },
    "weight": 0.1
   }
  ]
 }
}
  1. 只需1个请求就可以吗?
  2. 这是一个好方法吗?

    赞赏

  3. 的任何提示

0 个答案:

没有答案