我需要在我正在构建的网站上添加搜索功能,并且想知道是否有人做过类似的事情。
我有一个示例表,其中包含此格式的猫的详细信息:
Name, place, type, age, gender and size.
我只有一个搜索框,用户可以在其中输入搜索字词。我的问题是,我如何搜索表格,例如某人在“巴黎猫”中输入? 我希望能够搜索所有字段,并在找到后返回一些内容。
有没有办法实现这一点,而不是有很多方框可供他们选择搜索条件?任何帮助或建议将不胜感激。
答案 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全文搜索,以你想要的方式微调结果,但这应该让你开始。