我有一个消息索引,我也为每个messageHash
存储message
。我还有更多的领域。索引中有多个重复的message
字段,例如“你好”。我想要检索唯一的消息。
以下是我编写的用于搜索唯一邮件并按日期排序的查询。
{
"query": {
"bool": {
"must": {
"term": {
"message": "Hello"
}
},
"must_not": [
{
"term": {
"user1": "guest"
}
},
{
"term": {
"user2": "guest"
}
}
]
}
},
"aggs": {
"top_messages": {
"terms": {
"field": "messageHash"
},
"aggs": {
"top_messages_hits": {
"top_hits": {
"sort": [
{
"date": {
"order": "desc"
}
},
"_score"
],
"size": 1
}
}
}
}
}
}
我仍然收到重复的消息,而且它也没有按日期排序!就像我没有添加聚合一样。我无法弄清楚它有什么问题。
答案 0 :(得分:1)
如果有其他人有同样的问题......请记住,回复将是这样的:
{
"took" : X,
"timed_out" : false,
"_shards" : {
"total" : X,
"successful" : X,
"failed" : X
},
"hits" : {
"total" : X,
"max_score" : X,
"hits" : [
....
....
]
},
"aggregations" : {
"top_messages" : {
"doc_count_error_upper_bound" : X,
"sum_other_doc_count" : X,
"buckets" : [
{
"key" : "XXXXXXXXXXXXXXXXXXXXXXXX",
"doc_count" : X,
"top_messages_hits" : {
"hits" : {
"total" : X,
"max_score" : null,
"hits" : [
.....
.....
]
}
您将在第一个段中获得没有聚合的查询结果。只需向下滚动并检查聚合段。
如果您不想要第一个细分,则可以在查询中传递"size"=0
,如下所示:https://www.elastic.co/guide/en/elasticsearch/reference/current/returning-only-agg-results.html