【问题标题】:MongoDB full text search and the aggregation pipelineMongoDB全文搜索和聚合管道
【发布时间】:2014-05-19 07:04:48
【问题描述】:

我目前正在使用 MongoDB 的全文搜索功能来统计每小时包含某个关键字的文档数。

当在每个文档都是一条推文的大型集合中运行时,这真的很有趣。例如,对于关键字“thanks”,我们看到 Nov 29(Thanks Giving)。

我目前的方法有效(它生成了上面的图),但它不会扩展。目前,我通过遍历搜索返回的文档来手动计算每小时的推文数量。此方法不会扩展,因为此搜索结果最终将达到 MongoDB 文档限制。目前它有效,因为我只有 350 万条推文,但我计划收集更多。

data = db.command('text', collection, 
  search=query,
  project={'hour_bucket': 1, '_id': 0},
  limit=-1
)

hours = Counter()
  for d in data['results']:
    hours[d['obj']['hour_bucket']] += 1

我的问题是:可以在聚合管道中使用文本搜索吗?这将解决我所有的问题。但是我看到的唯一评论如下:https://jira.mongodb.org/browse/SERVER-9063

有谁知道这个作品的状态是什么?

【问题讨论】:

    标签: mongodb twitter


    【解决方案1】:

    有点巧合的是,聚合框架中对文本搜索的支持最近已通过标记 fixVersion 提交给即将到来的 MongoDB 2.5.5 开发/不稳定版本(请参阅SERVER-11675)。

    假设 QA/测试一切顺利,此功能将包含在 2.6 生产版本中。

    在 2.5.5 发布后,draft 2.6 release notes 中应该会包含更多信息,我鼓励您在开发环境中测试此功能。

    仅供参考,您可以通过mongodb-announce discussion group 查找或订阅发布公告。

    【讨论】:

      【解决方案2】:

      手册:http://docs.mongodb.org/manual/tutorial/text-search-in-aggregation/

      例子:

      db.tweets.aggregate(
          [   
              {   $match   : { $text: { $search: "query" } } },
              {   $project : { day  : { $substr: ["$created_at", 0, 10]}}},        
              {   $group   : { _id  : "$day",  number : { $sum : 1 }}},
              {   $sort    : { _id  : 1 }}        
          ]
      )
      

      【讨论】:

        猜你喜欢
        • 2016-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 2020-05-20
        • 1970-01-01
        • 2015-04-24
        • 2020-09-20
        相关资源
        最近更新 更多