有谁能让我知道如何使用php / mysql搜索引擎进行部分关键字搜索?
例如,如果一个人搜索“只是不能得到足够的”,我希望它返回包含关键词的搜索结果“只是不能用黑眼豆豌豆”或关键词“黑眼豆豆就可以”得到足够的“。
另一个例子:如果我输入“橙汁”我希望它返回带有关键字“橙汁味道好”的结果
它非常像google和youtube搜索。
我使用的代码是:http://tinypaste.com/eac6cf
答案 0 :(得分:0)
您使用的搜索方法是从少量记录中搜索的标准方法。例如,如果你只有大约一千条记录,那就没关系了。
但是如果你必须从数百万条记录中搜索,那么这种方法不会被使用,因为它会非常慢。
相反,你有两种选择。
分解您的搜索字段并构建您自己的索引,其中包含单个单词和对记录位置的引用。然后只搜索索引并从主表中查找相应的记录。
使用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 ;