Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 全文搜索就是答案吗?_Php_Mysql_Search - Fatal编程技术网

Php 全文搜索就是答案吗?

Php 全文搜索就是答案吗?,php,mysql,search,Php,Mysql,Search,好的,我有一个mySQL数据库,看起来像这样 ID-一个int和记录的数据的唯一ID 标题-项目名称 说明-项目说明 我想搜索关键字的标题和描述,目前我正在使用 从标题为%key%的“项目”中选择* 这是可行的,因为数据库中没有太多,但是搜索“这个键”并没有找到“这个那个键”,我想改进网站的搜索引擎,甚至可能会添加一些排名系统(但这需要很长时间) 关于这个问题,我听说过一种叫做“全文搜索”的东西,它(据我所知)是数据库设计的一个主要部分,但是作为一个对这个主题的新手,我对它一无所知,所以 1)

好的,我有一个mySQL数据库,看起来像这样

ID-一个int和记录的数据的唯一ID

标题-项目名称

说明-项目说明

我想搜索关键字的标题和描述,目前我正在使用

从标题为%key%的“项目”中选择*

这是可行的,因为数据库中没有太多,但是搜索“这个键”并没有找到“这个那个键”,我想改进网站的搜索引擎,甚至可能会添加一些排名系统(但这需要很长时间)

关于这个问题,我听说过一种叫做“全文搜索”的东西,它(据我所知)是数据库设计的一个主要部分,但是作为一个对这个主题的新手,我对它一无所知,所以

1) 你认为它有用吗

还有一个额外的问题

2) 关于数据库设计/搜索引擎设计,我可以阅读哪些内容,为我指明正确的方向

如果它是相关的,那么该站点目前是用stright PHP编写的(即没有框架)(我想到了将其转换为Ruby on Rails)

更新

谢谢大家,我将进行全文搜索。
对于以后发现这一点的任何人,我发现全文搜索也很好。

“%keyword%”类型搜索的问题是,即使在该列上创建索引,也无法在常规表中有效地搜索它。想想你在电话簿上看到的那条线会是什么样子。实际上没有办法优化它——你必须扫描整个电话簿——MySQL就是这么做的,一个完整的表扫描

如果您将搜索更改为“关键字%”,并使用索引,您可以获得非常快速的搜索。不过,听起来这不是你想要的

因此,考虑到这一点,我经常使用全文索引/搜索,以下是一些优点和缺点:

专业人士

  • 很快
  • 返回按相关性排序的结果(默认情况下,尽管您可以使用任何排序)
  • 可以使用停止词
缺点

  • 仅适用于MyISAM表
  • 过短的单词将被忽略(默认最小值为4个字母)
  • 在where子句中需要不同的SQL,因此需要修改现有查询
  • 与部分字符串不匹配(例如,“word”与“关键字”不匹配,仅与“word”匹配)


另一种选择是使用搜索系统,例如。它可以非常快速和灵活。优化搜索和集成MySQL。

你也可以考虑ZeNeN-Luxne。它比Sphinx更容易集成,因为它是纯PHP。

我想MySQL全文版足以满足您的需要,但值得注意的是,内置支持的可扩展性不太好。对于平均大小的文档,对于只有几十万行的表大小,它开始变得不可用。如果你认为这可能进一步成为一个问题,你可能已经开始研究斯芬克斯了。它正在成为MYSQL用户的实际标准,尽管我个人更喜欢使用java lucene实现我自己的解决方案。:)


此外,我还想指出全文搜索与标准的“%keyword%”搜索有本质的不同。与同类搜索不同,全文索引允许您搜索几个不必紧挨着显示的关键字。例如,谷歌等标准搜索引擎都是全文搜索引擎。

谢谢,我考虑过使用Sphinx之类的搜索引擎,但老实说,除非这需要花费大量时间,否则我宁愿自己构建它,因为我了解它的工作原理。我们正接近在我们的一个应用程序中实现Sphinx。我们对大量数据进行了大量搜索。我们使用全文搜索已有一段时间,但需要转到innodb进行事务处理。但是,全文很容易实现,而且速度非常快。我不建议这样做,因为它的速度相当慢