PHP MYSQL搜索引擎使用关键字



我正在尝试实现基于关键字搜索的搜索引擎。谁能告诉我哪种算法是实现关键字搜索的最佳(最快)算法?

我需要的是:

我的关键词:

search, faster, profitable

他们的同义词:

search: grope, google, identify, search   
faster: smart, quick, faster  
profitable: gain, profit  

现在,我应该在数据库中搜索上述同义词的所有可能排列,以确定最匹配的单词。

最好的解决方案是使用现有的搜索引擎,如Lucene或其替代方案之一(请参阅Lucene的最佳替代品是什么?)。

现在,如果你想自己实现它(这确实是一个很大的和存在的问题),你应该看看倒排索引的概念。这就是谷歌和其他搜索引擎使用的。当然,他们有很多额外的系统,但这是基本的。

倒排索引的想法是,对于每个关键字(和同义词),您存储包含该关键字的文档的 ID。然后,查找一组关键字的匹配文档非常容易,因为您只需在倒排索引中计算其列表的交集(或并集,具体取决于您要执行的操作)。例:

假设这是您的倒排索引:

smart: [42,35]
gain: [42]
profit: [55]

现在,如果您有一个查询"smart, gain",则您的匹配文档是 [42, 35] 和 [42] 的交集(或并集)。

若要处理同义词,只需扩展查询以在初始查询中包含单词的所有同义词。根据您的示例,您的查询将变为"更快、更快、获得、利润、有利可图"。

实现后,一个不错的改进是将TFIDF权重添加到关键字中。这基本上是一种将生僻词(编程)比普通词(编程)加权的方法。

另一种方法是浏览所有文档并找到包含您的单词(或其同义词)的文档。倒排索引会快得多,因为您不必每次都浏览所有文档。耗时的操作是构建索引,只需执行一次。

最新更新