elasticsearch 选择布尔查询弹性搜索的不同值
我有一个查询,从弹性索引中获取一些用户帖子数据。我对这个查询很满意,尽管我需要让它返回具有唯一用户名的行。当前,它按用户显示相关帖子,但可能会两次显示一个用户
elasticsearch 选择布尔查询弹性搜索的不同值,
elasticsearch,
elasticsearch,我有一个查询,从弹性索引中获取一些用户帖子数据。我对这个查询很满意,尽管我需要让它返回具有唯一用户名的行。当前,它按用户显示相关帖子,但可能会两次显示一个用户 { "query": { "bool": { "should": [ { "match_phrase": { "gtitle": {"query": "voice","boost": 1}}},
{
"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不被分析
,以确保这一点。在那上面
希望这有帮助 是否希望每个用户显示一篇文章,即如果一个用户有多篇文章与“voice”匹配,是否只返回一篇?你也可以发布地图的相关部分吗?是的,这正是我想要的。。当前,它显示来自同一用户的多篇文章,这些文章与该查询匹配。至于映射,我还不明白它是什么,所以我没有添加任何内容。。。映射是制作索引的函数?你有名为userid或类似的字段吗?是的,我有“userid”、“username”、“mates”、“description”、“category”、“country”、“city”、“profilepicture”谢谢你是我能为你做的最低限度。。。真正的绅士!很高兴我能帮上忙,请考虑接受这个答案,这对将来的读者也有帮助。