MySQL MATCH GEGEN nicht funktioniert
Bin ich tatsächlich arbeiten auf einer website, wo gibt es zwei Tabellen, die fast identisch, wo die Partie GEGEN Werke auf der einen, aber nicht auf der anderen. Finden Sie heraus, warum ich versucht habe, um dies zu reduzieren auf eine einfache, "Lassen Sie uns machen Sie eine einfache Tabelle arbeiten" - aber es funktioniert nicht.
Mache ich Tests mit phpMyAdmin-und das ist MySQL 5.1.41.
Test habe ich bauen verwendet die folgenden zu definieren... in der Tabelle
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`);
und wenn ich eine SHOW INDEX FROM test sehe ich, dass es ein FULLTEXT-Schlüssel, bestehend aus Titel und body.
Füge ich ein paar Zeilen mit
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.');
(einige Körper Inhalt aus Gründen der Kürze entfernt)
und wenn ich dann laufen
SELECT * FROM `test` WHERE MATCH (`title`, `body`) AGAINST ('consectetur');
Bekomme ich ein leeres ResultSet - keine Zeilen gefunden, aber wenn ich
SELECT * FROM `test` WHERE `body` LIKE '%consectetur%';
dann ein Datensatz gefunden wird.
Obwohl ich habe eine Menge Erfahrung mit MySQL ist dies das erste mal, das ich verwendet habe, PASSEN so mache ich etwas bescheuert? Warum dieses nicht funktioniert? Hat der index erstellt werden müssen (ich habe eine REPARATUR auf dem Tisch) oder ist das ganze soll automatisch passieren?
Nur für Informationen, die Tabelle, die funktioniert, ist definiert mit
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;
... und die eine, die verursacht mir Probleme und schickte mich für diesen Weg ist
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;
Obwohl ich versucht habe, definieren die zweite genau wie die erste und immer noch funktioniert es nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
müssen Sie
IN BOOLEAN MODE
am EndeBitte schauen Sie hier:
http://www.sqlfiddle.com/#!2/1b80b/2
Aus der Handbuch:
Haben Sie zwei Zeilen in der Tabelle...