想要从 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"
}
}
这将只为该字段中的每个重复值留下一个文档。您可以控制它将使用标准排序的文档(即返回折叠中排序值最高的文档)。
请注意,还有一个称为内部命中的附加功能,您可能希望在将来使用它 - 请注意,它会增加文档提取并对性能产生负面影响。
我想根据“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"
}
}
这将只为该字段中的每个重复值留下一个文档。您可以控制它将使用标准排序的文档(即返回折叠中排序值最高的文档)。
请注意,还有一个称为内部命中的附加功能,您可能希望在将来使用它 - 请注意,它会增加文档提取并对性能产生负面影响。