我有大约700万个短语需要与约3亿个查询进行匹配。
查询可以是子字符串或包含短语本身。基本上,我想要两个短语之间的“相似度”测量值[不一定是编辑距离]。
请问有人能提供高效算法的指针来完成这个任务吗?我更喜欢分布式算法,因为我将使用Python通过Hadoop进行流处理。
这至少不是很琐碎的,因为一方面你有非常多的数据,另一方面你还有更多的数据。
最简单的方法是在7百万短语上建立一个Lucene索引,让Hadoop作业查询该索引。不确定是否需要Solr服务器或任何类似Python实现。
Mapper应该写出短语ID或行号,无论您如何标识它。或者至少是短语本身,以及匹配分数。
在reduce步骤中,您可以选择按短语键进行减少,并写出所有相关短语和分数。(或者您想要的任何内容)
有关相似性,您可以在此处阅读更多信息:
Apache Lucene的相似性
Apache Lucene本身