MySQL'in FULLTEXT dizinlerini kullanarak PHP web uygulamam için arama desteği eklemeye çalışıyorum. MySQL FULLTEXT çalışmıyor
Ben (tek bir metin alanıa
ile MyISAM türünü kullanarak,) bir test tablosu oluşturulan ve bazı örnek verileri girdi. Şimdi haklıysam, aşağıdaki sorgu her iki satırı da döndürmelidir:
SELECT * FROM test WHERE MATCH(a) AGAINST('databases')
Ancak hiçbiri geri dönmez. Biraz araştırma yaptım ve söyleyebildiğim kadarıyla her şeyi yapıyorum - tablo bir MyISAM tablosu, FULLTEXT indeksleri ayarlandı. Sorgu isteminden ve phpMyAdmin'den şanssız çalıştırarak denedim. Çok önemli bir şeyi mi özlüyorum?
GÜNCELLEME:
CREATE TABLE IF NOT EXISTS `uploads` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`size` int(11) NOT NULL,
`type` text NOT NULL,
`alias` text NOT NULL,
`md5sum` text NOT NULL,
`uploaded` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
Ve veri kullanıyorum: Cody'nin çözüm benim test durumda çalışırken Tamam, benim gerçek tablo üzerinde çalışmak için görünmüyor
INSERT INTO `uploads` (`id`, `name`, `size`, `type`, `alias`, `md5sum`, `uploaded`) VALUES
(1, '04 Sickman.mp3', 5261182, 'audio/mp3', '1', 'df2eb6a360fbfa8e0c9893aadc2289de', '2009-07-14 16:08:02'),
(2, '07 Dirt.mp3', 5056435, 'audio/mp3', '2', 'edcb873a75c94b5d0368681e4bd9ca41', '2009-07-14 16:08:08'),
(3, 'header_bg2.png', 16765, 'image/png', '3', '5bc5cb5c45c7fa329dc881a8476a2af6', '2009-07-14 16:08:30'),
(4, 'page_top_right2.png', 5299, 'image/png', '4', '53ea39f826b7c7aeba11060c0d8f4e81', '2009-07-14 16:08:37'),
(5, 'todo.txt', 392, 'text/plain', '5', '7ee46db77d1b98b145c9a95444d8dc67', '2009-07-14 16:08:46');
Şimdi koşuyorum sorgusu:
SELECT * FROM `uploads` WHERE MATCH(name) AGAINST ('header' IN BOOLEAN MODE)
Satır 3'ü döndürmeli, header_bg2.png. Bunun yerine boş bir sonuç kümesi daha elde ediyorum.
mysql> show variables like 'ft_%';
+--------------------------+----------------+
| Variable_name | Value |
+--------------------------+----------------+
| ft_boolean_syntax | + -><()~*:""&| |
| ft_max_word_len | 84 |
| ft_min_word_len | 4 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | (built-in) |
+--------------------------+----------------+
5 rows in set (0.02 sec)
"başlığı" kelimesi uzunluğu kısıtlamalar dahilinde olduğunu ve bunu bir dur sözcüğü (Ben listesini almak için nasıl emin değilim) şüpheliyim: boolean arama için My seçenekleri aşağıda belirtilmiştir. Herhangi bir fikir? Doğal dil modu ve Boole modu:
https://dev.mysql.com/doc/refman/5 burada şifreler listesini görebilirsiniz.5/en/fulltext-stopwords.html, innodb için http://dev.mysql.com/doc/refman/5.7/en/innodb-ft-default-stopword-table.html veya SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD dosyasını çalıştırın; –