mongodb map reduce 用于搜索条件

标签 mongodb algorithm mapreduce

我有一个包含名为 searchTerms 的字段的 mongo 文档。这是一个包含单词的数组,例如["term1","term2", "term3","term4"]

我想编写一个按相关性返回文档的函数。这意味着在 searchCriteria 中具有最多搜索词的文档将首先出现在下一个最高数量的词等之后。

例子:

文件:

   {"_id":"1", "searchTerms":["a","b","c","d"]}
   {"_id":"2", "searchTerms":["a","b","x","q"]}
   {"_id":"3", "searchTerms":["a","e","x","n"]}
   {"_id":"4", "searchTerms":["e","f","g","z"]}

对于搜索词:["a","b","c"],结果应该是:

{"_id":"1", "searchTerms":["a","b","c","d"]}
{"_id":"2", "searchTerms":["a","b","x","q"]}
{"_id":"3", "searchTerms":["a","e","x","n"]}

我已经编写了一个函数来执行此操作,但是它非常复杂而且我认为效率很低。我正在阅读有关 map reduce 的内容,想知道在这种情况下它是否有帮助?我绞尽脑汁想弄清楚如何做到这一点。我不确定它是否可以?如果是,有人可以告诉我它是如何工作的吗?

最佳答案

一个简单的集合运算符就足够了。使用 $setIntersection 与输入数组和相交数组的 $project $size 进行比较。 $按大小降序排序并投影最终响应。

aggregate([{
    "$project": {
        "_id":0,
        "fields" : "$$ROOT",
        "matches": {
            "$size": {
                "$setIntersection": [
                    "$searchTerms", ["a", "b"]
                ]
            }
        }
    }
}, {
    "$sort": {
        "matches": -1
    }
}])

关于mongodb map reduce 用于搜索条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40754524/

相关文章:

c++ - 如何为 opencv 算法处理文件夹中的图像?

java - 计算子图的权重

hadoop - Hadoop-Mapreduce作业无法在Windows中运行(Cygwin)

mongodb - 有什么可以限制mongodb cpu的使用吗?

mongodb - 在 MongoDB 中将一天增加到日期

MongoDB - 文件大小巨大且不断增长

c - 在多个 C 文件上运行自动化测试

javascript - 使用map()和/或reduce()来简化Node(或原生JavaScript)中的forEach()语句

java - 将自定义值传递给 Reducer

java - mongodb 是否将系统时区保持为时区?