我的网站的搜索功能

时间:2011-09-01 23:32:29

标签: php mysql

我需要在我正在构建的网站上添加搜索功能,并且想知道是否有人做过类似的事情。

我有一个示例表,其中包含此格式的猫的详细信息:

Name, place, type, age, gender and size.

我只有一个搜索框,用户可以在其中输入搜索字词。我的问题是,我如何搜索表格,例如某人在“巴黎猫”中输入? 我希望能够搜索所有字段,并在找到后返回一些内容。

有没有办法实现这一点,而不是有很多方框可供他们选择搜索条件?任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:4)

在这种情况下非常有效的一种简单方法是在mysql中进行全文搜索。您可以将其编入索引所有列和自然语言搜索。

如果您有一个名为cats的mysql表,其中包含以下架构:

mysql> desc cats;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| name   | varchar(100) | YES  | MUL | NULL    |                | 
| place  | varchar(100) | YES  |     | NULL    |                |
| type   | varchar(100) | YES  |     | NULL    |                |
| age    | int(11)      | YES  |     | NULL    |                |
| gender | varchar(100) | YES  |     | NULL    |                |
| size   | varchar(100) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+

您可以运行以下SQL来创建索引:

CREATE FULLTEXT INDEX cats_search ON cats (name, type, place, gender);

然后,当您在paris中获得搜索字符串'male tabby'时,您可以使用此SQL搜索表:

SELECT *
     , MATCH(name, type, place, gender)
       AGAINST ('male tabby in paris' IN BOOLEAN MODE) relevance
FROM cats
WHERE MATCH(name, type, place, gender)
      AGAINST ('male tabby in paris' IN BOOLEAN MODE)
ORDER BY relevance DESC;

将按照mysql决定最相关的顺序返回与这些术语匹配的所有行。

你必须研究mysql全文搜索,以你想要的方式微调结果,但这应该让你开始。