php - 简单搜索页面 PHP MySQL 全文搜索

标签 php mysql full-text-search

我正在我的网站上构建一个搜索页面。

起初我查看了搜索引擎,但那些需要 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:

http://www.sqlfiddle.com/#!9/98579/1

关于php - 简单搜索页面 PHP MySQL 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35080204/

相关文章:

php - 问题返回数据库搜索的总和或总数

c# - NHibernate + SqlServer 全文搜索

php - UNION SELECT MySQL 查询,用 PHP 做数学运算和显示

php - Cakephp 查找转换为 Sql 语法

mysql - 对于非常小的(4 个字符)值,BIGINT UNSIGNED 值超出范围

mysql - 为每个日期选择行的子集

solr - 导入丰富的文档时,SOLR 是否有最佳实践 schema.xml?

elasticsearch - 如何为摄取附件 elasticsearch 插件禁用 base64 存储?

php - 如何通过 woocommerce REST API 添加产品图片?

PHP换行符似乎不起作用