首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用关键字的PHP MYSQL搜索引擎

使用关键字的PHP MYSQL搜索引擎
EN

Stack Overflow用户
提问于 2011-05-13 13:07:08
回答 1查看 918关注 0票数 2

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

我需要的是:

我的关键词:

代码语言:javascript
复制
search, faster, profitable

它们的同义词:

代码语言:javascript
复制
search: grope, google, identify, search   
faster: smart, quick, faster  
profitable: gain, profit  

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

EN

回答 1

Stack Overflow用户

发布于 2011-07-07 10:13:30

最好的解决方案是使用现有的搜索引擎,如Lucene或其替代引擎之一(参见Which are the best alternatives to Lucene? )。

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

倒排索引的思想是,对于每个关键字(和同义词),存储包含该关键字的文档的id。然后,查找一组关键字的匹配文档就非常容易了,因为您只需在倒排索引中计算它们的列表的交集(或联合,取决于您想要做什么)。示例:

让我们假设这是您的倒排索引:

代码语言:javascript
复制
smart: [42,35]
gain: [42]
profit: [55]

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

要处理同义词,只需扩展查询以包括初始查询中单词的所有同义词。根据你的例子,你的查询会变成“更快,更好,更好”。

一旦你实现了这一点,一个很好的改进就是在你的关键字中添加TFIDF权重。这基本上是一种加权稀有单词(编程)而不是普通单词()的方法。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5987457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档