我正在我的网站上构建一个搜索页面。
起初我查看了搜索引擎,但那些需要 VPS 或专用服务器。我目前在共享服务器上。
所以我尝试了 MySQL 全文搜索。
CREATE TABLE IF NOT EXISTS `deck_search_table`(
`id` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
`index_date` INTEGER NOT NULL,
`user_id` INTEGER NOT NULL,
`username` VARCHAR(70) NOT NULL,
`deck_id` INTEGER NOT NULL,
`deck_title` VARCHAR(145) DEFAULT NULL,
`last_modified` INTEGER NOT NULL,
`card_one` TEXT NOT NULL,
`card_two` TEXT NOT NULL,
`card_three` TEXT DEFAULT NULL,
`card_count` INTEGER NOT NULL
)
ENGINE=MyISAM
DEFAULT CHARSET=utf8;
ALTER TABLE deck_search_table ADD FULLTEXT(card_one, card_two, card_three);
这是我的 table 的样子。但我无法让它工作。
我在数据库中放了两行。一个使用 Fastidous
一次,一个使用 Fastidous
两次。然后运行这个
SELECT * FROM deck_search_table WHERE MATCH (card_one) AGAINST ('Fastidous')
得到零结果。我删除了带有两个 Fastidous
单词的那个,它给了我一个结果。
但我不太确定这是如何工作的。
基本上,我如何执行搜索?...并返回从最相关到最不相关的结果?
这是我想做的一个例子。
$timeVar = strtotime("Today");
$searchQuery = "Search for the goods Mister Search Engine";
SELECT * FROM deck_search_table WHERE last_modified >=$timeVar AND
MATCH (deck_title,card_one,card_two,card_three) AGAINST ($searchQuery)
最佳答案
您必须添加更多行。如果单词作为噪音出现在超过 50% 的行中,引擎 MyISAM
将忽略该单词。因此,要么添加更多行,要么将引擎更改为 InnoDB
。
工作示例:
InnoDB:
http://www.sqlfiddle.com/#!9/575c0d/2
MyISAM:
关于php - 简单搜索页面 PHP MySQL 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35080204/