我有一个查询,可以从弹性索引中获取一些用户发布的数据。我对该查询感到满意,尽管我需要使其返回具有唯一用户名的行。当前,它显示用户的相关帖子,但是可能显示一个用户两次。
{ "query": { "bool": { "should": [ { "match_phrase": { "gtitle": {"query": "voice","boost": 1}}}, { "match_phrase": { "gdesc": {"query": "voice","boost": 1}}}, { "match": { "city": {"query": "voice","boost": 2}}}, { "match": { "gtags": {"query": "voice","boost": 1} }} ],"must_not": [ { "term": { "profilepicture": ""}} ],"minimum_should_match" : 1 } } }
我已经阅读了有关聚合的内容,但了解得不多(也尝试使用aggs但也没有用)....非常感谢您的帮助
您将需要使用术语汇总来获取所有唯一身份用户,然后使用热门匹配来针对每个用户仅获取一个结果。这就是它的样子。
{ "query": { "bool": { "should": [ { "match_phrase": { "gtitle": { "query": "voice", "boost": 1 } } }, { "match_phrase": { "gdesc": { "query": "voice", "boost": 1 } } }, { "match": { "city": { "query": "voice", "boost": 2 } } }, { "match": { "gtags": { "query": "voice", "boost": 1 } } } ], "must_not": [ { "term": { "profilepicture": "" } } ], "minimum_should_match": 1 } }, "aggs": { "unique_user": { "terms": { "field": "userid", "size": 100 }, "aggs": { "only_one_post": { "top_hits": { "size": 1 } } } } }, "size": 0 }
在这里size,用户聚合的内部值为100,如果您有更多的唯一用户(默认值为10),则可以增加该值,最外面的size也为零,以仅获得聚合结果。要记住的一件事是您的用户ID必须是唯一的,即 ABC 和 abc 将被视为不同的用户,您可能必须设置用户ID not_analyzed才能确保这一点。关于更多。
size
not_analyzed
希望这可以帮助!!