mapreduce - CouchDB中的map-reduce函数

标签 mapreduce couchdb

我有一个java程序,可以读取PDF文件的所有单词。我将带有页码的单词保存在数据库(couchDB)中。现在我想编写一个映射和一个化简函数,其中列出每个单词以及该单词出现的页码,但如果单词在一页上出现多次,我只需要一个条目。结果应该是一行包含单词,第二行包含页码列表(用逗号分隔的字符串)。每个带有页码的单词都是 couchDB 中的一个单独文档。 如何使用映射缩减函数(过滤页码的相同条目)来做到这一点? 感谢帮助。

最佳答案

当然有不止一种方法可以做到这一点。我会选择简单的东西。假设您的文档看起来有点像这样:

{ 'type': 'word-index', 'word': 'Great', 'page_number': 45 }

这是在第 45 页找到“Great”一词的结果。现在您的 View 索引由 View 函数创建:

function map(doc) {
    if (doc.type == 'word-index') {
        emit([doc.word, doc.page_number], null);
    }
}

对于减少部分,只需使用“_count”内置函数。

现在要获取书中所有出现单词“Great”的列表,只需使用 startkey=["Great"] 和 endkey=["Great", {}] 查询 View 即可。现在结果看起来有点像:

["Great", 45], 4
["Great", 70], 7

这意味着世界“伟大”在第 45 页出现了 4 次,在第 70 页出现了 7 次。您可以从中提取所需的逗号分隔列表。出现的次数是一个奖励。

--编辑--

您还必须在查询中使用 group_level=2。如果不这样做,查询结果将只是一行,其中包含您拥有的所有文档的计数。

关于mapreduce - CouchDB中的map-reduce函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16892922/

相关文章:

python - 启动 map 作业时遇到错误

java - 根据单词的长度在reducer上分类

hadoop - 映射后的多个(独立)reduce 函数

ssl - 如何在 couchdb 中禁用 http 访问

javascript - 调用router中的中间件函数

javascript - 使用 CouchDB 的 PouchDB 和 Cookie 身份验证实际上并未登录用户

hadoop - 基于Hadoop的自动化

git - 版本控制 couchdb map-reduce 函数

javascript - 从 javascript 访问 CouchDB

hadoop - 预期 org.apache.hadoop.hive.ql.io.orc.OrcStruct,收到 org.apache.hadoop.hive.ql.io.orc.OrcSerde$OrcSerdeRow