部分关键字搜索

时间:2011-06-10 04:03:35

标签: php mysql search-engine

有谁能让我知道如何使用php / mysql搜索引擎进行部分关键字搜索?

例如,如果一个人搜索“只是不能得到足够的”,我希望它返回包含关键词的搜索结果“只是不能用黑眼豆豌豆”或关键词“黑眼豆豆就可以”得到足够的“。

另一个例子:如果我输入“橙汁”我希望它返回带有关键字“橙汁味道好”的结果

它非常像google和youtube搜索。

我使用的代码是:http://tinypaste.com/eac6cf

3 个答案:

答案 0 :(得分:0)

您使用的搜索方法是从少量记录中搜索的标准方法。例如,如果你只有大约一千条记录,那就没关系了。

但是如果你必须从数百万条记录中搜索,那么这种方法不会被使用,因为它会非常慢。

相反,你有两种选择。

  1. 分解您的搜索字段并构建您自己的索引,其中包含单个单词和对记录位置的引用。然后只搜索索引并从主表中查找相应的记录。

  2. 使用MySQL的全文搜索功能。这更容易实现,但有自己的限制。这样您就不必自己构建索引。

答案 1 :(得分:0)

MySQL full-text search在这里会有所帮助,但只适用于myISAM表,当数据集变得非常大时,性能往往会耗尽。

在我工作的公司,我们将搜索查询推送到Sphinx。像Craigslist,The Pirate Bay,Slashdot这样的网站都使用它,因此它在生产中得到了很好的证明。

答案 2 :(得分:0)

在MySQL中,您可以使用MyISAM类型表,只需定义文本字段(CHAR,VARCHAR或TEXT),然后创建FULLTEXT索引。请记住文本字段的大小,允许的字符越多,索引的大小越大,更新的速度就越慢。

其他大型数据集选项包括类似Solr的内容,但除非您已经知道您的数据将包含大量数据,否则您当然可以从MySql开始,看看它是如何进行的。

大多数MySQL编辑器,包括phpmyadmin提供了添加索引的gui,如果你手动执行代码看起来像:

CREATE TABLE IF NOT EXISTS `test2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `ft_name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;