一尘不染

选择布尔查询elasticsearch的不同值

elasticsearch

我有一个查询,可以从弹性索引中获取一些用户发布的数据。我对该查询感到满意,尽管我需要使其返回具有唯一用户名的行。当前,它显示用户的相关帖子,但是可能显示一个用户两次。

{
          "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但也没有用)....非常感谢您的帮助


阅读 191

收藏
2020-06-22

共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": {
    "unique_user": {
      "terms": {
        "field": "userid",
        "size": 100
      },
      "aggs": {
        "only_one_post": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  },
  "size": 0
}

在这里size,用户聚合的内部值为100,如果您有更多的唯一用户(默认值为10),则可以增加该值,最外面的size也为零,以仅获得聚合结果。要记住的一件事是您的用户ID必须是唯一的,即
ABCabc 将被视为不同的用户,您可能必须设置用户ID
not_analyzed才能确保这一点。关于更多

希望这可以帮助!!

2020-06-22