gpt4 book ai didi

MySQL MATCH AGAINST 不工作

转载 作者:可可西里 更新时间:2023-11-01 06:35:49 25 4
gpt4 key购买 nike

我实际上在一个网站上工作,该网站有两个表,几乎相同,其中 MATCH AGAINST 在一个表上有效,但在另一个表上无效。为了找出为什么我试图将其简化为一个简单的“让我们制作一个简单的表格”——但它没有。

我正在使用 phpMyAdmin 进行测试,这是 MySQL 5.1.41。

我构建的测试使用以下定义表...

CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL,
`title` text NOT NULL,
`body` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

ALTER TABLE `test` ADD FULLTEXT (`title`, `body`);

当我执行 SHOW INDEX FROM 测试时,我看到有一个包含标题和正文的 FULLTEXT 键。

我插入几行

INSERT INTO `test` (`id`, `title`, `body`) VALUES 
('1', 'Lorem Ipsum', 'Lorem ipsum dolor sit amet, consectetur ... lacus porta euismod.'),
('2', 'Lorem Ipsum (cont)', 'Nunc leo massa, vulputate ... euismod fringilla.');

(为简洁起见删除了一些正文内容)

然后当我跑的时候

SELECT * FROM `test` WHERE MATCH (`title`, `body`) AGAINST ('consectetur');

我得到一个空的结果集 - 没有找到任何行,但是如果我运行

SELECT * FROM `test` WHERE `body` LIKE '%consectetur%';

然后找到一条记录。

虽然我对 MySQL 有很多经验,但这是我第一次使用 MATCH,我是不是在做一些愚蠢的事情?为什么这不起作用?是否需要构建索引(我已经对表进行了修复)还是应该自动进行?

仅供引用,工作表定义为

CREATE TABLE IF NOT EXISTS `web_pages1` (
`id` int(11) NOT NULL,
`title` varchar(255) DEFAULT NULL,
`slug` varchar(255) DEFAULT NULL,
`meta_keywords` text,
`meta_description` text,
`snippet` text,
`body` mediumtext,
`created_by` int(11) DEFAULT NULL,
`date_created` datetime DEFAULT NULL,
`date_published` date DEFAULT NULL,
`author` varchar(255) DEFAULT NULL,
`edited_by` int(11) DEFAULT NULL,
`date_edited` datetime DEFAULT NULL,
`status` tinyint(4) NOT NULL DEFAULT '1',
`parent_id` tinyint(11) DEFAULT NULL,
`menu_id` int(11) DEFAULT NULL,
`short_name` varchar(255) DEFAULT NULL,
`sort_order` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `search` (`title`,`slug`,`meta_keywords`,`meta_description`,`snippet`,`body`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

给我带来问题并让我走这条路的是

CREATE TABLE IF NOT EXISTS `web_news1` (
`id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL,
`meta_keywords` text,
`meta_description` text,
`snippet` text NOT NULL,
`body` text NOT NULL,
`created_by` int(11) NOT NULL,
`date_created` datetime NOT NULL,
`date_published` date DEFAULT NULL,
`author` varchar(255) DEFAULT NULL,
`edited_by` int(11) DEFAULT NULL,
`date_edited` datetime DEFAULT NULL,
`status` tinyint(4) DEFAULT '0',
PRIMARY KEY (`id`),
FULLTEXT KEY `search` (`title`,`slug`,`meta_keywords`,`meta_description`,`snippet`,`body`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

虽然我已经尝试像第一个一样定义第二个,但它仍然不起作用。

最佳答案

你需要在末尾添加IN BOOLEAN MODE

SELECT * FROM `test` WHERE MATCH (title, body) AGAINST ('Ipsum' IN BOOLEAN MODE);

请看这里:

http://www.sqlfiddle.com/#!2/1b80b/2

关于MySQL MATCH AGAINST 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com