在大型数据库中查找最佳匹配的最佳技术或算法

时间:2018-03-16 01:37:52

标签: database algorithm search find

我们计划建立一个大型数据库,其对象的结构如下:

PERSON1:   技能:['a','b','c']

PERSON2:   技能:['a','b']

Person3可能:   技能:['d','e','f']

Person4:   技能:['a','b','d']

然后给出技能输入,算法/技术应该能够快速找到最合适的人,给予一些技能。

实施例: 找到有技能的人:a,b - >返回像[Person1,Person2,Person4,Person3]

这样的列表

所以我想提出一些关于在哪些技术(数据库/语言)上构建它的建议以及哪个算法应该在具有大约10k寄存器的数据库上表现良好。

2 个答案:

答案 0 :(得分:1)

您想使用inverted index来解决此问题。基本思想是从

中反转您的表示
1 -> a, b, c
2 -> a, b
3 -> d, e, f
4 -> a, b, d

a -> 1, 2, 4
b -> 1, 2, 4
c -> 1
d -> 3, 4
e -> 3
f -> 3

现在,对于每项技能,您都有一份能够胜任该技能的人员列表(可能按技能等级排序)。为了获得技能a,b的结果,你扫描a和b的列表并增加你找到的每个人的计数器,这样你就可以给你1,2,4个人计数3。

这与用于文本搜索的索引结构基本相同(此处您有包含术语的文档)。像elastic search这样的系统包含更高级的反向索引,可能符合您的需求。

答案 1 :(得分:0)

除了数据库之外,您计划使用您认为是主要的查询(更常用的查询)可能会从索引中获得巨大的好处。

您应该以与查询相同的顺序创建索引。根据您用于示例的模型,我认为您使用的是NoSQL DB。索引在搜索方面提供了更好的性能,但需要更多时间进行记录。

最后我要说10k不是一个大集合,但是如果没有索引,查询嵌套数组可能会慢得多。