有效地查询大量文档集中的短语

时间:2020-07-07 20:10:42

标签: algorithm search text

在一次采访中,我收到一个问题,要求我设计一个在线图书馆的搜索引擎,其中包含成千上万个带有数百万个单词的文档。最初,面试官只要求我搜索单个单词,以澄清:

  • 搜索精确的关键字(“ overflo”不返回“ overflow”返回true)
  • 区分大小写可以忽略

我的答案是使用搜寻器算法,该算法在每个文档中运行并创建一个查找表,该表存储信息,在执行任何查询之前,该文档中使用了给定单词的文档。然后,一旦执行查询,所有算法所要做的就是在查找表中找到该单词并返回使用该单词的文档列表。

第二步,他们问我要搜索多个单词(不一定是连续的)怎么办,我的答案是对每个单词进行新查询并找到结果的交集。

最后,面试官问我要他们查询连续的单词或短语(例如“堆栈溢出”)该怎么办。在这一点上,我的查询表失败了,因为连续单词之间没有任何联系,而且我无法用这种方法提出解决方案。我该如何处理这类查询?我的最初答案和设计是否有问题?我在互联网上进行了搜索,但找不到任何值得注意的东西。

1 个答案:

答案 0 :(得分:0)

对于第二种情况,请生成地图,以使每个键都是一个单词,每个值都是一组具有以下属性的对象

{
  string document name : location/document_name,
  integer index : index, //location in document,
  toString : hash the object
}

然后,当您需要查找“堆栈溢出”的结果时

对于集合1中的所有元素,该值是否存在于集合2中,但已使用item_index + 1进行了修改。

获得两个单词的结果,但只返回文档名称。如果有三个单词,请执行与两个单词相同的过程,但对于第三个单词,仅检查通过单词1和单词2的单词是否匹配单词2的匹配项,并使用item_index检查这些项目是否在集合3中存在+ 1。

相关问题