我正在尝试实现基于关键词搜索的搜索引擎。谁能告诉我实现关键字搜索的最好(最快)算法是什么?
我需要的是:
我的关键词:
search, faster, profitable它们的同义词:
search: grope, google, identify, search
faster: smart, quick, faster
profitable: gain, profit 现在,我应该在数据库中搜索上述同义词的所有可能排列,以确定最匹配的单词。
发布于 2011-07-07 10:13:30
最好的解决方案是使用现有的搜索引擎,如Lucene或其替代引擎之一(参见Which are the best alternatives to Lucene? )。
现在,如果你想自己实现它(这确实是一个很好的问题),你应该看看Inverted Index的概念。这就是谷歌和其他搜索引擎所使用的。当然,他们在上面有很多额外的系统,但这是基本的。
倒排索引的思想是,对于每个关键字(和同义词),存储包含该关键字的文档的id。然后,查找一组关键字的匹配文档就非常容易了,因为您只需在倒排索引中计算它们的列表的交集(或联合,取决于您想要做什么)。示例:
让我们假设这是您的倒排索引:
smart: [42,35]
gain: [42]
profit: [55]现在,如果您有一个查询"smart,gain",则匹配的文档是42、35和42的交集(或并集)。
要处理同义词,只需扩展查询以包括初始查询中单词的所有同义词。根据你的例子,你的查询会变成“更快,更好,更好”。
一旦你实现了这一点,一个很好的改进就是在你的关键字中添加TFIDF权重。这基本上是一种加权稀有单词(编程)而不是普通单词()的方法。
另一种方法是浏览所有文档,找到包含您的单词(或其同义词)的文档。不过,倒排索引会快得多,因为您不必每次都遍历所有文档。构建索引是一项耗时的操作,只需执行一次。
https://stackoverflow.com/questions/5987457
复制相似问题