想要从 elasticsearch 的命中部分获得不同的记录

Want to get distinct records in hits section from elasticsearch

我想根据“departmentNo”获取所有不同的记录。 请检查以下索引数据:(这是虚拟数据。)

  {'departmentNo': 1, 'departmentName': 'Food', 'departmentLoc': "I1", "departmentScore": "5", "employeeid" : 1, "employeeName": "vijay", ...}
    {'departmentNo': 1, 'departmentName': 'Food', 'departmentLoc': "I1", "departmentScore": "5", "employeeid" : 2, "employeeName": "rathod", ...}
    {'departmentNo': 2, 'departmentName': 'Non-Food', 'departmentLoc': "I2", "departmentScore": "6", "employeeid" : 3, "employeeName": "ajay", ...}
    {'departmentNo': 2, 'departmentName': 'Non-Food', 'departmentLoc': "I2", "departmentScore": "6", "employeeid" : 4, "employeeName": "kamal", ...}
    {'departmentNo': 1, 'departmentName': 'Food', 'departmentLoc': "I1", "departmentScore": "5", "employeeid" : 5, "employeeName": "rahul", ...}

我想要下面的输出。

{'departmentNo': 1, 'departmentName': 'Food', 'departmentLoc': "I1", "departmentScore": "5", "employeeid" : 1, "employeeName": "vijay", ...}
{'departmentNo': 2, 'departmentName': 'Non-Food', 'departmentLoc': "I2", "departmentScore": "6", "employeeid" : 3, "employeeName": "ajay", ...}

我试图在点击部分获取数据。但是没有找到答案。 所以我夸张地尝试了。在查询下面使用

{
  "size": 0,
  "aggs": {
    "Group_By_Dept": {
      "terms": {
        "field": "departmentNo"
      },
      "aggs": {
        "group_docs": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  }
}

我通过上面的查询得到了数据。但我想要所有不同的数据,它们应该支持分页+排序。 在 elastic 6.0 中我们可以使用 bucket_sort ,但我使用的是 5.6.7.So 我不能使用 bucket_sort.

那么我可以用任何其他方式来做吗? 如果我能在hits的部分得到数据就好了。

(我不想更改我的索引映射。实际上我在这里添加了虚拟映射。但用例是相同的。)

您可以使用 field collapsing:

{
  "query": { ... },
  "from": 153,
  "size": 27,
  "collapse": {
    "field": "departmentNo"
  }
}

这将只为该字段中的每个重复值留下一个文档。您可以控制它将使用标准排序的文档(即返回折叠中排序值最高的文档)。

请注意,还有一个称为内部命中的附加功能,您可能希望在将来使用它 - 请注意,它会增加文档提取并对性能产生负面影响。