假设我有几十亿行文字和几百万个“关键字”。任务是通过这些行,看看哪一行包含哪些关键字。换句话说,给定(K1 -> V1)
和(K2 -> V2)
的地图,创建(K2 -> K1)
的地图,其中K1=lineID
,V1=text
,K2=keywordID
和{{ 1}}。另请注意:
到目前为止,我最初的想法是:
V2=keyword
我的问题
提前致谢!
答案 0 :(得分:0)
有一些优化的多模式/ 2D搜索算法。不再发明轮子。你还应该考虑分配你的计算。也许hadoop和map / reduce?
答案 1 :(得分:0)
不确定但你在这里期待的是什么(K2-> K1)与倒排索引(http://en.wikipedia.org/wiki/Inverted_index)非常相似。
我相信Lucene / Solr在索引数据时使用相同的算法(它也会进行预数据分析/标记化),您可能需要找出一种可以读取Lucene构建索引的方法(以Lucene的“IndexReader”javadoc开头)。
在索引数据时,将每行视为Lucene索引中的一个文档,在索引中创建两个字段1)行ID和2)数据 - 一旦索引所有文档(行),您已经为K2创建了> K1你,你只需要找到解析它的方法。
我不确定在创建K2-> K1后你的下一步是什么,如果它比你不需要解析你的索引更快的查找,你可以解雇Lucene查询。
在SOLR中,如果有帮助,您还可以在索引上生成分面搜索结果。
修改强> 您可以使用LUKE工具分析Lucene索引(https://code.google.com/p/luke/)