Elasticsearch明显的父母数量

时间:2016-09-26 14:16:19

标签: .net elasticsearch nest

我已经为ES创建了一个查询,我正在尝试包含聚合。这些将显示在用户看到的页面一侧,以便他们可以进一步过滤其结果。这些中的每一个都会在它们旁边计数。让我解释一下我正在使用的模型,这样你就可以理解我正在寻找的计数。

以下是我的索引示例:

for (i in 1,2)
 ... fetch video file info
 ... fetch xml file info
 upload

让我们说某人进行通配符搜索。他们会收到所有老师的名单。另一方面,他们将收到前50名学生姓名,用户可以使用这些名称进一步过滤他们的结果。此过滤器列表需要计算具有该特定学生的教师数量。但是,一个教师可能不止一次就有一个学生(例如,老师从一年级教学转到二年级,并且两年都有很多相同的学生)。

以下是我对ES的查询示例(我使用Nest):

"mappings": {
  "teacher": {
    "properties": {
      "name": {
        "type": "string"
      },
      "studentCount": {
        "type": "integer"
      }
    }
  },
  "student": {
    "_parent": {
      "type": "teacher"
    },
    "properties": {
      "name": {
        "type": "string"
      },
      "classesCount": {
        "type": "integer"
      }
    }
  }
}

但是,由于DocCount正在计算子文档的数量,因此它通常高于与该特定学生对应的教师记录的实际数量。我也尝试过添加基数聚合

return await elasticClient.SearchAsync<TeacherModel>(s => s
  .Index(index)
  .Type("teacher")
  .Query(q => builtQuery)
  .Aggregations(a => a
    .Children<StudentModel>("Students", c => c
      .Type("student")
      .Aggregations(ca => ca
        .Terms("Students", t => t
          .Field("name")
          .Size(50))))));

这可以让我更接近,有时它甚至是正确的。我尝试使用PrecisionThreshold值进行调整,但即使这样,在处理〜2,000,000个教师文档时,有时也会被数千个记录关闭。有没有办法准确或更准确地计算这些父文件?

0 个答案:

没有答案