ElasticSearch随着时间的推移最频繁的术语

时间:2016-04-22 12:49:54

标签: elasticsearch

我们正在研究技术选项,这些选项将允许我们对数百万份文档进行最频繁的术语查询。我们对旧版本的ES有一点经验,但绝不是专家。我在阅读ES文档时是否能够做到这一点并不清楚。

想象一下来自10,000个不同人群的数百万条推文的数据集。我们希望做到以下几点:

对于10,000个推特中的每一个,他们在过去一小时,最后一天,去年发布过的最常见的十大词汇是什么?

同样地,类似地,如果每个推文记录包含所提到的主题标签的数组,则计算大多数常见主题标签的相同统计数据。

如果一个选项是仅在最终用户通过用户界面询问时按需进行这些计算,那么这也是一个选项。我们只希望实际使用这些计算中的一小部分。

这可以在ES上以有效的方式完成吗?您能否提供一个粗略的示例,以便我们知道如何相应地使用API​​?感谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望用户获得最高级别的条款

POST /tweets/tweet
{
"text": "We're researching technology",
"user": 1,
"hasttags": ["hastag", "hastag1"]

}

POST /tweets/tweet
{
"text": "We have a little experience with an older version of ES #hastag",
"user": 1,
"hasttags": ["hastag", "hastag2"]
}



POST /tweets/tweet
{
"text": "For each one of the 10,000 tweeters, what are the top-10 most #hastag",
"user": 2,
"hasttags": ["hastag", "hastag3"]
}


POST /tweets/_search
{
  "size": 0,
  "query": {
    "terms": {
      "user": [
        "1"
      ]
    }
  },
  "aggs": {
    "users": {
      "terms": {
        "field": "user",
        "size": 10
      },
      "aggs": {
        "terms": {
          "terms": {
            "field": "text",
            "size": 10
          }
        },
        "hasttags": {
          "terms": {
            "field": "hasttags",
            "size": 10
          }
        }
      }
    }
  }
}

这是一个例子,因为这里的问题是它仅限于10个用户,因为在ES 1.4中没有办法对聚合进行分页。另一方面,您可以将大小指定为10,000,但是您需要尝试查看它对真实数据和群集机器的工作原理,因为它需要更多内存。我正在我的搜索引擎中构建最常用的搜索词,我将其设置为1000以进行聚合,并且它非常酷。

TODO: 查看stop words以排除“a”中的条款等等