Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找一组属性之间的最相似性(mongodb)_C#_Algorithm_Mongodb_Mapreduce - Fatal编程技术网

C# 查找一组属性之间的最相似性(mongodb)

C# 查找一组属性之间的最相似性(mongodb),c#,algorithm,mongodb,mapreduce,C#,Algorithm,Mongodb,Mapreduce,我有一个以下语法的数据库: {_id:'342', values:{ A: '432', B: 'asdf', C: '23', D: 'gg'}} {_id:'343', values:{ A: 's', B: 'fsd', C: 'as', D: '4'}} {_id:'344', values:{ A: 'f', B: 'f', C: 'af', D: '32'}} {_id:'345', values:{ A: 'f', B: 'f', C: '333', D: 'adf'}} 给定a

我有一个以下语法的数据库:

{_id:'342', values:{ A: '432', B: 'asdf', C: '23', D: 'gg'}}
{_id:'343', values:{ A: 's', B: 'fsd', C: 'as', D: '4'}}
{_id:'344', values:{ A: 'f', B: 'f', C: 'af', D: '32'}}
{_id:'345', values:{ A: 'f', B: 'f', C: '333', D: 'adf'}}
给定a、B、C、D的一组值-我想找到最相似的文档

e、 g

给定,{values:{A:'f',B:'f',C:'333',D:'832'}}它将匹配_id:345,因为它有A,B和C匹配

我希望得到与我得到的值最相似的结果

是否有一种查询/算法可以快速完成此任务


注意:我不知道如何命名,如果你有更好的标题,请随意编辑

这里有一种方法,假设您希望结果按与匹配的接近程度排序,并假设只有4个(因此可以进行所有排列):

重复使用$elemMatch(请参阅)

第一次查询所有4个值(1个查询)。
如果失败,则查询3个值的每个组合(4个查询)。
如果失败,则查询2个值的每个组合(6个查询)。
如果失败,只查询一个匹配项(4个查询)


另一种方法是使用map reduce。在map函数中,计算一行的分数,如果分数大于0,则将文档id作为键,分数作为值。在reduce阶段,在不做任何工作的情况下通过单个结果。按分数对结果排序。

它真的是在数据库中还是可以加载到内存中?数据库有多大,单个匹配有多稀疏?i、 e.如果你找到了所有A='f',那占数据库的百分比是多少?